ElasticSearch如何根据指定字段的元素数量执行搜索查询
Elasticsearch查询数组字段元素数量的方法
有两种常用的实现方案,分别适用于不同场景:
- 方案1:直接使用脚本查询(无需提前修改字段结构)
如果你的Itinerary是数组类型(包括普通对象数组、nested类型数组),可以直接在查询中调用Painless脚本获取数组长度进行匹配,示例DSL如下:
{ "query": { "bool": { "filter": [ { "script": { "script": { "source": "doc['Itinerary'].size() == params.target_count", "params": { "target_count": 4 } } } } ] } } }
注意:该方案适合小数据量临时查询,因为脚本查询无法命中索引,数据量级大的时候查询性能会偏低。
- 方案2:预存数组长度字段(性能最优,推荐生产环境使用)
写入数据时同步新增一个Itinerary_length整数类型字段,存储当前Itinerary数组的元素数量,查询时直接匹配该字段即可:
{ "query": { "term": { "Itinerary_length": 4 } } }
该方案可以直接命中索引,查询性能远高于脚本查询,适合有大量这类查询需求的生产场景。
内容的提问来源于stack exchange,提问作者Ryan Tee
相关产品推荐
相关产品推荐

