Elasticsearch数组字段匹配仅返回5个高亮的原因及全量返回方法
Elasticsearch数组字段全匹配高亮配置方案
问题根源
Elasticsearch默认限制数组类型字段的高亮结果数量,仅返回前5个匹配元素,这就是你只看到5个names元素被高亮的原因。
解决方法
在搜索请求的highlight字段配置中,通过以下两种方式取消数量限制:
方式一:指定足够大的size值
直接设置size为数组元素数量(或足够大的数值),确保所有匹配项都被返回:
GET /test_highlight_number/_search { "query": { "match": { "names": { "query": "john" } } }, "highlight": { "fields": { "names": { "size": 8 // 对应你的数组长度,或设为1000这类大数 } } } }
方式二:设置number_of_fragments: 0
该参数会让Elasticsearch返回所有匹配的片段(数组元素),无需指定具体数量:
GET /test_highlight_number/_search { "query": { "match": { "names": { "query": "john" } } }, "highlight": { "fields": { "names": { "number_of_fragments": 0 } } } }
效果验证
执行上述请求后,highlight.names将返回全部8个高亮后的元素:
"highlight" : { "names" : [ "<em>john</em> 1", "<em>john</em> 2", "<em>john</em> 3", "<em>john</em> 4", "<em>john</em> 5", "<em>john</em> 6", "<em>john</em> 7", "<em>john</em> 8" ] }
内容的提问来源于stack exchange,提问作者Luke Cordingley
相关产品推荐
相关产品推荐

