文档目录
从这里开始
优化搜索结果
如何优化搜索结果设置可搜索字段排序器设置搜索结果分页搜索结果过滤结果高亮哪些字段适合高亮高亮字段在索引中设置高亮字段在搜索请求中设置高亮字段高亮搜索结果示例返回字段设置

结果高亮

在展示搜索结果的时候,用户希望可以一目了解地看到搜索词匹配上的对象。

比如说,如果用户搜索关于 iPhone 的文章,那么在标题或摘要中显示 iPhone 并且用高亮色表示出来,将会极大地提升用户体验。比如说,在 Google 搜索 最快 手机 时出现的高亮。

highlight-example

在卡拉搜索中,我们提供 highlightFields 搜索选项用来高亮查询词在字段中的结果。你可以通过两种方式来设置 highlightFields 高亮字段:

  1. 在索引设置中
  2. 在每个单独请求中

高亮的结果会将对应字段的被高亮部分,用 HTML 标签,或是其它你设置的标签强调出来。比如说,如果你的字段是 大话西游,用户搜索 大话 时,默认即会返回

<strong>大话</strong>西游

其中,<strong> 是 HTML 里的加粗强调标签。

对于 iOS,安卓端或小程序,你可以定制对应的标签以实现高亮显示。

哪些字段适合高亮

通常我们建议,将一些摘要性的字段作为高亮结果。比如说

  • 标题或商品名称
  • 描述商品或文章的摘要
  • 简短的说明文字

对于正文或长篇文字,特别是关键词出现频率较高的情况下,高亮可能会让用户失去焦点,从而影响搜索体验。因此,如果需要全文高亮,我们建议仅摘取其中一小部分(通常是开头)来进行高亮。

高亮字段

请注意,要使一个高亮字段生效,这个字段需要同时满足三个条件

  1. 高亮的字段是字符串类型:数字、布尔变量等无法高亮
  2. 字段在“可搜索字段” searchableFields 中出现过,也就是说 highlightFields 必须配合 searchableFields 同时使用
  3. 字段在对象中的确存在

只有同时满足了三个条件,API 才会返回高亮结果。

需要高亮的字段需要在 searchableFields 中存在,但 highlightFields 不一定与 searchableFields 完全一样。

在索引中设置高亮字段

对多数使用场景,我们推荐直接在索引设置中设置高亮字段。如果在索引中设置了高亮字段,默认对所有的搜索请求,服务器都会返回设置的高亮结果。

比如说,如需将字段 titlesummary 设置为高亮字段,我们只需要在对应的索引设置中,将标题和摘要字段添加到高亮字段列表中即可。

请注意,如果需要一个字段被高亮,这个字段必须出现在可搜索字段中。比如,如果标题字段 title 没有出现在可搜索字段中的话,即使 title 被设置为了高亮字段,在返回结果中也不会出现。

在搜索请求中设置高亮字段

多数情况下,在卡拉后台配置好 searchableFieldshighlightFields 后,在前端直接搜索时即可直接展示高亮字段,而不用带在每个搜索请求中。

但有时,你可能需要在不同的前端环境中(网站、iOS 端或小程序端)实现不同的搜索展示。这样的情况下,你可能需要对单个请求设置高亮,那么你可以在搜索请求中通过指定 highlightFields 的值来实现。

highlightFields 是一个数组,你可以指定一系列字段来高亮。

使用 highlightFields 的搜索请求的例子:

{
"query": "无间道",
"searchableFields": ["name", "actors", "story"],
"highlightFields": ["name"]
}

请注意,如果在搜索请求中使用了高亮设置,那么这个高亮设置会覆盖索引设置中的高亮设置。比如,如果在请求中要求高亮 ["name", "title"] 而在索引设置中仅设置了 ["name"],那么 nametitle 都会被高亮。

同时请注意,搜索请求中的高亮设置,仍然遵从可搜索字段的设置。如果高亮字段没有出现在可搜索字段中,那么在搜索请求中的高亮字段也会被忽略。

高亮搜索结果示例

在搜索结果的 hits 字段中,如果有设置高亮字段,则会在 hits.highlights.${fieldName} 中出现。在下面的示例中,用户搜索 大话,结果中,字段 summarytitle 均被设置为需要高亮。

每个返回的高亮字段中含有两个值

  • value : 即被高亮的字段,高亮部分被设置的高亮标签标出
  • hasMatch : 布尔变量,表明该字段中是否有匹配关键字的高亮出现

在下面的例子中,字段 summary 中没有匹配搜索词 大话,而标题 title 中,则含有匹配

{
"totalHits": 1,
"hits": [
{
"id": "n_u-QXQBFAjd3marbeiR",
"source": {
"title": "大话西游",
"summary": "一部周星驰主演的爱情喜剧片"
},
"highlights": {
"summary": {
"value": "一部周星驰主演的爱情喜剧片",
"hasMatch": false
},
"title": {
"value": "<strong>大话</strong>西游",
"hasMatch": true
}
}
}
],
"queryTimeUsed": 0
}
友情链接更新日志© 2020, 卡拉搜索, Built with ❤️ in San Francisco + Beijing

京ICP备15049164号-3