【发布时间】:2016-10-14 12:14:02
【问题描述】:
我正在使用 Algolia 的 algoliasearch-client-js 和 autocomplete.js 在我的网站上进行搜索。这行得通。
但我还想包含与搜索查询匹配的文本的摘录/sn-p。该怎么做?
我当前的代码是:
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 设置是一种缩短(“sn-p”)您的 长文本块以在搜索结果中显示它们。想一想 关于 Google 结果下方显示的小段文字: 从页面内容的句子子集构建,包括 您的匹配关键字,并避免淹没搜索结果页面。 例如,如果您限制“描述”的字数 属性为 10,“_sn-pResult.description.value”属性 JSON 答案将仅包含这 10 个最佳单词 描述。
但是,没有AttributesToSnippet 的示例。在他们的Github documentation 上,我找到了更多信息:
attributesToHighlight
- 范围:设置、搜索
- 类型:字符串数组
- 默认值:空
要突出显示的默认属性列表。如果设置为 null,则所有索引 属性突出显示。
包含要突出显示的属性列表的字符串 根据查询。属性用逗号分隔。你可以 也使用字符串数组编码(例如 ["name","address"])。如果 属性与查询不匹配,则返回原始值。经过 默认情况下,所有索引属性都会突出显示(只要它们是 字符串)。如果要突出显示所有属性,可以使用 *。
我正在努力将他们抽象的、分散的信息翻译成一段连贯的代码。有什么建议吗?
【问题讨论】:
-
您当前的代码应该已经突出显示与
suggestion._highlightResult.title.value匹配的单词。如果您检查元素一个应该匹配的单词,您应该在匹配的单词周围看到<em>标记。 -
attributesToSnippet的工作方式与attributesToHighlight完全相同,除了您在模板中使用_snippetResult而不是_highlightResult,但对于标题,您可能不需要它。 -
@Jerska 感谢您的评论。没错,
_highlightResult.title.value会返回与搜索查询匹配的内容的标题。但它并没有告诉我是哪一部分内容导致该标题弹出。 -
@Jerska(第二条评论)。在我当前的代码中访问
_snippetResult会给出“未定义”错误消息。我已经试过了(还有很多其他的东西);这就是我在这里问的原因。 -
您在
attributesToIndex中指定了哪些属性?
标签: javascript search algolia