如何编写Elasticsearch单字段多精确值数组查询?
多值精确匹配Elasticsearch查询方案
因为你的data.name是text类型,直接匹配会触发分词逻辑,所以必须借助它的keyword子字段来实现精确匹配。针对你的需求,最简洁高效的方式是使用terms查询——它原生支持传入字符串数组,能直接匹配数组中任意一个值的文档。
基础查询示例
{ "query": { "terms": { "data.name.keyword": ["Q4 Test WC Schüssel", "Q4_18 Bankerlampen", "MORE_SEARCHTERMS"] } } }
补充说明
terms查询会返回所有data.name.keyword字段值与数组中任意元素完全相等的文档- 必须使用
.keyword子字段:text类型的主字段会对原始字符串做分词处理,而keyword子字段完整保留了原始字符串,只有它能满足精确匹配的需求 - 如果需要叠加其他过滤条件,建议把
terms查询放到bool的filter子句中,这样既不会影响文档评分,还能利用缓存提升查询性能:
{ "query": { "bool": { "filter": [ { "terms": { "data.name.keyword": ["Q4 Test WC Schüssel", "Q4_18 Bankerlampen", "MORE_SEARCHTERMS"] } } // 可在此添加其他过滤条件 ] } } }
内容的提问来源于stack exchange,提问作者squadwuschel
相关产品推荐
相关产品推荐

