我正在使用Algolia的algoliasearch-client-js和autocomplete.js来为我的网站提供搜索功能。这很好用。
但我也想包括搜索查询匹配的文本摘录/片段。如何实现?
为了突出引起查询与记录匹配的摘录,他们的 FAQ 中提到:
但我也想包括搜索查询匹配的文本摘录/片段。如何实现?
我的当前代码是:
autocomplete('#search-input', { hint: true, autoselect: true }, [
{
source: autocomplete.sources.hits(index, { hitsPerPage: 7 }),
displayKey: 'title',
templates: {
footer: '<span class="search-foot">Powered by <a href="https://www.algolia.com/" target="_blank" title="Algolia - Hosted cloud search as a service"><img src="/static/assets/algolia-logo.png" width="47" height="15"></a></span>',
suggestion: function(suggestion) {
return '<div class="search-lang">' +
suggestion._highlightResult.platform.value +
'</div>' +
suggestion._highlightResult.title.value;
}
}
}
]).on('autocomplete:selected', function(event, suggestion, dataset) {
window.location.href = suggestion.url;
});
为了突出引起查询与记录匹配的摘录,他们的 FAQ 中提到:
然而,没有AttributesToSnippet 设置是一种缩短(“snippet”)长文本以在搜索结果中显示它们的方法。只需想象一下 Google 结果下面显示的小段文本:它由页面内容的句子子集构建,包括您匹配的关键字,并避免淹没搜索结果页。例如,如果您将 “description” 属性的单词数限制为 10,则 JSON 答案的 “_snippetResult.description.value” 属性仅包含此描述的最佳 10 个单词。
AttributesToSnippet
的示例。在他们的 Github 文档 上,我发现了更多信息:
attributesToHighlight
- 作用范围: 设置, 搜索
- 类型: 字符串数组
- 默认值: null
默认要高亮显示的属性列表。如果设置为null,则会高亮显示所有索引属性。
一个字符串,其中包含根据查询要高亮显示的属性列表。属性之间用逗号分隔。您还可以使用字符串数组编码(例如["name","address"])。如果属性没有与查询匹配的内容,则返回原始值。默认情况下,所有索引属性都会被高亮显示(只要它们是字符串)。如果要高亮显示所有属性,则可以使用*。
我很难将他们抽象、零散的信息翻译成连贯的代码。有什么建议吗?
suggestion._highlightResult.title.value
来突出显示匹配的单词。如果您检查一个应该匹配的单词,您应该会看到匹配单词周围有<em>
标签。 - JerskaattributesToSnippet
的工作方式与attributesToHighlight
完全相同,只是在模板中使用_snippetResult
而不是_highlightResult
,但对于标题来说,您可能不需要这样做。 - Jerska_highlightResult.title.value
返回了与搜索查询匹配的内容标题。但它并没有显示出是内容的哪个部分导致了该标题的出现。 - Jos_snippetResult
会出现“未定义”的错误消息。我已经尝试了这个方法(以及很多其他方法);这就是为什么我在这里询问的原因。 - JosattributesToIndex
中指定了哪些属性? - JerskaattributesToIndex
。也许现在需要,但是attributesToIndex
不是autocomplete的选项。 - Jos