ElasticSearch 8.6:数组字段转布尔字段的查询实现
Elasticsearch 8.6 两种数组场景的布尔字段生成方案
1. 普通数组字段场景
需求:为每条数据新增布尔字段fieldArrayA_as_boolean,当fieldArrayA长度大于0且包含val1时返回true,否则返回false。
对应的查询语句:
GET /your-index/_search { "script_fields": { "fieldArrayA_as_boolean": { "script": { "source": "doc['fieldArrayA'].size() > 0 && doc['fieldArrayA'].contains('val1')" } } }, "_source": true // 保留原始字段,若不需要可设为false }
说明:通过script_fields动态计算目标字段,脚本中利用doc对象直接获取数组的长度与包含关系,返回布尔结果。
2. 嵌套数组字段场景
需求:为每条数据新增布尔字段fieldArrayB_as_boolean,当fieldArrayB长度大于0且存在fieldB1值为val1的元素时返回true,否则返回false。
对应的查询语句:
GET /tly-idx_test1/_search { "script_fields": { "fieldArrayB_as_boolean": { "script": { "source": "doc['fieldArrayB.fieldB1'].size() > 0 && doc['fieldArrayB.fieldB1'].contains('val1')" } } }, "_source": true }
说明:嵌套类型数组的子字段可通过doc['嵌套字段.子字段']的方式获取所有值的集合,判断逻辑与普通数组一致;该方式基于索引字段查询,性能优于遍历原始_source数据。
内容的提问来源于stack exchange,提问作者toch
相关产品推荐
相关产品推荐

