Elasticsearch实战——搜索高亮
程序员文章站
2022-03-05 10:00:32
...
Elasticsearch实战——搜索高亮
1. 自定义高亮片段
在前面的基本查询中,我们简单的使用了高亮功能标记查询关键字,ES默认会用<em></em>
标签标记关键字。如果我们想使用自定义标签,可以在高亮属性中给需要高亮的字段加上pre_tags
和post_tags
。示例如下:
GET website/_search
{
"query":{
"match":{
"title":"自行车"
}
},
"highlight":{
"fields":{
"title":{
"pre_tags":["<strong>"],
"post_tags":["</strong>"]
}
}
}
}
2. 多字段高亮
搜索高亮的时候可以设置多个字段同时高亮。比如,搜索title
字段的时候,我们希望address
字段中的关键字也能高亮。这个时候我们需要把require_field_match
属性的值设置为false
。require_field_match
的默认值为true
,只会高亮匹配的字段。多字段高亮如下:
GET website/_search
{
"query": {
"match_phrase": {
"title": "北京"
}
},
"highlight": {
"require_field_match": false,
"fields": {
"title": {
"pre_tags": [
"<strong>"
],
"post_tags": [
"</strong>"
]
},
"address": {
"pre_tags": [
"<strong>"
],
"post_tags": [
"</strong>"
]
}
}
}
}
3. 高亮性能分析
ES提供了三种高亮器,分别是默认的highlighter高亮器
、postings-highlighter高亮器
和fast-vector-highlighter高亮器
。
默认的highlighter
是最基本的高亮器。highlighter
高亮器实现高亮功能需要对_source
中保存的原始文档进行二次分析,它的速度在三种高亮器里面最慢,优点是不需要额外的存储空间。
postings-highlighter
高亮器实现高亮不需要二次分析,但是需要在字段的映射中设置index_options参数的值为offsets,保留关键词的偏移量,速度快于highlighter高亮器。如:
PUT website
{
"mappings":{
"properties":{
"title":{
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart",
"index_options":"offsets"
}
}
}
}
fast-vector-highlighter高亮器
实现高亮速度最快,但是需要在字段的映射中设置term_vector参数的取值为with_opsitions_offsets
,保存关键词的位置和偏移信息,占用的存储空间最大,是一种以空间换时间的做法。
PUT website
{
"mappings":{
"properties":{
"title":{
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart",
"term_vector":"with_positions_offsets"
}
}
}
}
4. 关注我
搜索微信公众号:java架构强者之路
推荐阅读
-
Elasticsearch实战 | 必要的时候,还得空间换时间!
-
干货 |《从Lucene到Elasticsearch全文检索实战》拆解实践
-
安装ElasticSearch搜索工具并配置Python驱动的方法
-
Spring Boot与Kotlin 整合全文搜索引擎Elasticsearch的示例代码
-
ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程
-
《ElasticSearch6.x实战教程》之简单搜索、Java客户端(上)
-
基于Vue实现关键词实时搜索高亮显示关键词
-
Elasticsearch单机双节点集群部署实战
-
使用ElasticSearch6.0快速实现全文搜索功能的示例代码
-
Elasticsearch核心技术与实战-简介