ElasticSearch DSL查询之高亮显示

什么是高亮显示?

高亮显示是指在搜索结果中,将用户搜索的关键字突出显示,使其更为醒目。以百度搜索为例,当用户搜索“JAVA”时,搜索结果中的标题或概述部分会将“JAVA”高亮显示,通常以红色标出,便于用户查看。




高亮显示的实现原理

高亮显示的实现原理可以分为两个步骤:

  • 步骤一: 在页面中找到搜索结果中与搜索关键字相关的词条,并将这些词条包裹在 HTML 标签内(如 <em> 标签)。
  • 步骤二: 在页面的 CSS 中指定这些标签的样式,比如设置颜色为红色,来达到高亮显示的效果。



前端与后端的角色

  • 前端: 负责页面布局和样式的设计,但由于前端无法预知用户的搜索关键字,因此无法提前在页面中修改内容或添加标签。
  • 后端: 在接收到用户的查询请求后,后端根据查询条件返回相关数据,并在返回的数据中为匹配的关键词添加标签,确保页面展示时能够正确地显示高亮效果。



倒排索引与高亮显示

Elasticsearch 使用倒排索引来存储数据,倒排索引不仅存储了关键词和文档的对应关系,还记录了关键词在文档中的具体位置。通过倒排索引,Elasticsearch 可以快速地查找关键词并确定其在文档中的位置,从而在搜索结果中自动为这些关键词添加高亮标签。



Elasticsearch 高亮显示的实现

在 Elasticsearch 中,高亮显示的配置非常简单,只需要在查询请求中添加 highlight 参数。

其语法结构如下:

GET /IndexName/_search
{
  "query": {
    "match": {
      "field": "text"
    }
  },
  "highlight": {
    "fields": {	// 指定要高亮的字段
      "field": { 
        // 可省略下面两个参数,默认会在高亮的前后添加<em></em>标签
        "pre_tags": "<em>",	// 高亮的前置标签
        "post_tags": "</em>"	// 高亮的后置标签
      }
    }
  }
}

高亮显示标签

  • 预置标签: 默认情况下,Elasticsearch 使用 <em> 标签来高亮显示关键词。
  • 自定义标签: 可以通过 pre_tagspost_tags 参数来自定义高亮标签。例如,将标签更改为 <font> 标签:
{
  "highlight": {
    "fields": {
      "name": {
        "pre_tags": "<font color='red'>",
        "post_tags": "</font>"
      }
    }
  }
}

示例:

GET /items/_search
{
  "query": {
    "match": {
      "name": "脱脂牛奶"
    }
  },
  "highlight": {
    "fields": {
      "name": {}
    }
  }
}
  • query: 表示查询条件,使用 match 查询来搜索商品名称中包含“脱脂牛奶”的文档。
  • highlight: 配置高亮显示。
    • fields: 指定要高亮的字段,如商品名称 name

通过这个配置,Elasticsearch 会自动在搜索结果中找到“脱脂牛奶”出现的地方,并为其加上标签。


返回结果:



注意事项

  • source 与 highlight 的区别: Elasticsearch 在返回查询结果时,会包含两个部分:
    • source: 原始文档内容,不会受到高亮标签的影响。
    • highlight: 高亮后的查询结果,包含加上标签的字段值。
  • 所以,如果需要访问高亮的结果,应该访问 highlight 部分,而不是 source 部分。



高亮显示的应用场景

高亮显示在商品搜索、文章检索、知识库查询等应用场景中非常常见,用户能够通过高亮标出关键词,更容易找到与其查询相关的信息。



总结

在 Elasticsearch 中实现高亮显示主要依赖于倒排索引和定位关键词位置的能力,通过指定需要高亮的字段和标签,Elasticsearch 可以自动为匹配的关键词加上标签。在前端的展示中,通过指定 CSS 样式来实现高亮效果,确保搜索结果更易于用户浏览。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值