ElasticSearch设置number_of_fragments为0时高亮异常问题咨询
ElasticSearch 多分词搜索词高亮不符合预期问题
在ElasticSearch中,将number_of_fragments设置为0以获取字段完整内容时,系统会高亮所有与搜索词匹配的分词,但当搜索词可拆分为2个及以上分词时,高亮结果不符合预期。
查询语句
"must" => [ %{ "query_string" => %{ "default_operator" => "AND", "fields" => ["message_parse"], "query" => "success after" } }, %{"match_phrase" => %{"message_parse" => %{"query" => "success after"}}} ]
返回的高亮结果
"highlight" => %{ "message_parse" => ["<em>success</em>_<em>after</em> and <em>success</em> before and <em>after</em> abc <em>success</em> <em>after</em>"] },
问题原因
默认高亮逻辑会匹配所有符合query_string中单个分词(success和after)的内容,即便同时加入了match_phrase查询,高亮器仍会基于所有匹配的分词项进行高亮,而非仅针对连续的短语"success after"。
解决方案
通过调整高亮设置,强制高亮逻辑仅针对短语匹配结果进行高亮:
修改查询,添加针对性的高亮配置:
"must" => [ %{ "query_string" => %{ "default_operator" => "AND", "fields" => ["message_parse"], "query" => "success after" } }, %{"match_phrase" => %{"message_parse" => %{"query" => "success after"}}} ], "highlight" => %{ "fields" => %{ "message_parse" => %{ "number_of_fragments" => 0, "type" => "phrase", "highlight_query" => %{ "match_phrase" => %{"message_parse" => %{"query" => "success after"}} } } } }
配置说明
type: "phrase":指定高亮器优先处理短语匹配的内容,减少单个分词的无效高亮。highlight_query:明确指定高亮仅基于match_phrase查询结果,这样只会高亮连续出现"success after"的片段,零散的success或after将不再被高亮。
内容的提问来源于stack exchange,提问作者dat hoang
相关产品推荐
相关产品推荐

