Highlight您能够从搜索结果中的一个或多个字段中获取突出显示的片段,以便您可以向用户显示查询匹配的位置。当您请求突出显示时,响应包含highlight 每个搜索命中的附加元素,其中包括突出显示的字段和突出显示的片段。
在提取要突出显示的术语时,highlight不会反映查询的布尔逻辑。因此,对于一些复杂的布尔查询(例如,嵌套的布尔查询,使用的查询minimum_should_match等),可以突出显示与查询匹配不对应的文档的部分。
突出显示需要字段的实际内容。如果未存储该字段(映射未设置store为true),_source则加载实际值并从中提取相关字段_source。
例如,要content使用默认突出显示器获取每个搜索命中中的字段的突出显示,请highlight在请求正文中包含指定content字段的对象:
GET /my_index/_search {{ "query" : {"query" : { "match": { "content": "kimchy" }"match": { "content": "kimchy" } },},
"highlight" : {
"fields" : {
"content" : {}
}
}
}
Elasticsearch支持三种highlight,默认unified:
unified,plain和fvh(fast vector highlighter)。您可以指定type要为每个字段使用的突出显示器。
Unified highlighter
unified highlighter使用Lucene的统一highlighter。这个突出显示器将文本分成句子,并使用BM25算法对单个句子进行评分,就好像它们是语料库中的文档一样。它还支持准确的短语和多项(模糊,前缀,正则表达式)突出显示。这是默认的highlighter
Plain highlighter
plain highlighter使用标准Lucene的highlighter。它试图在词语重要性和短语查询中的任何单词定位标准方面反映查询匹配逻辑
plain highlighter最适合在单一领域突出简单的查询匹配。为了准确反映查询逻辑,它会创建一个微小的内存索引,并通过Lucene的查询执行计划程序重新运行原始查询条件,以访问当前文档的低级匹配信息。对于需要突出显示的每个字段和每个文档都会重复此操作。如果要在复杂查询的大量文档中突出显示很多字段,我们建议使用unified highlighter postings或term_vector字段vector highlighter
fvh highlighter使用Lucene的Fast Vector highlighter。此突出显示器可用于映射中term_vector设置为的 字段with_positions_offsets。Fast Vector highlighter
PUT my_index
{
"mappings": {
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"term_vector": "with_positions_offsets"
},
"ip_addr": {
"type": "keyword"
}
}
}
}
fragment_size |
突出显示的片段的大小(以字符为单位)默认为100 |
fragment_offset |
控制要开始突出显示的边距。仅在使用 fvh 有效 |
no_match_size |
如果没有要突出显示的匹配片段,则要从字段开头返回的文本量。默认为0(不返回任何内容) |
number_of_fragments |
要返回的最大片段数。如果片段数设置为0,则不返回任何片段。而是突出显示并返回整个字段内容。当您需要突出显示标题或地址等短文本时,这可能很方便,但不需要分段。如果number_of_fragments 为0,fragment_size则忽略。默认为5 |
pre_tags |
与结合使用post_tags来定义用于突出显示文本的HTML标记。默认情况下,高亮文本被包裹在和标签。指定为字符串数组 |
post_tags |
与结合使用pre_tags来定义用于突出显示文本的HTML标记。默认情况下,高亮文本被包裹在和标签。指定为字符串数组 |
您可以全局指定突出显示设置,如果字段存在同样设置则被覆盖
GET /my_index/_search
{
"query" : {
"match": {
"content": "采购商纷至沓来"
}
},
"highlight" : {
"number_of_fragments" : 3,
"fragment_size" : 150,
"fields" : {
"content" : {"type": "fvh"}
}
}
}
GET /my_index/_search
{
"query" : {
"match": {
"content": "采购商纷至沓来"
}
},
"highlight" : {
"number_of_fragments" : 3,
"fragment_size" : 150,
"fields" : {
"content" : {
"type": "fvh",
"number_of_fragments" : 3,
"fragment_size" : 150
}
}
}
}
GET /my_index/_search
{
"query" : {
"match": {
"content": "采购商纷至沓来"
}
},
"highlight" : {
"number_of_fragments" : 3,
"fragment_size" : 150,
"pre_tags" : ["
"post_tags" : [""],
"fields" : {
"content" : {
"pre_tags" : ["
"post_tags" : [""],
"type": "fvh",
"number_of_fragments" : 3,
"fragment_size" : 150
}
}
}
}
使用内置styled标记
GET /my_index/_search
{
"query" : {
"match": {
"content": "采购商纷至沓来"
}
},
"highlight" : {
"tags_schema" : "styled",
"fields" : {
"content" : {
}
}
}
}