Elasticsearch7.13如何查询字段值为单元素数组的文档?
解决方案
查询单元素数组格式的文档
Elasticsearch的keyword类型默认支持数组写入,索引层不会区分普通字符串和单元素字符串数组,因此需要通过Painless脚本读取原始_source内容做类型判断,查询语句如下:
GET <替换为你的索引名>/_search { "query": { "script": { "script": { "lang": "painless", "source": "return params._source.url instanceof List && params._source.url.size() == 1" } } } }
批量修正字段格式
确认查询结果符合预期后,可以直接用_update_by_query接口批量把单元素数组改为普通字符串:
POST <替换为你的索引名>/_update_by_query { "query": { "script": { "script": { "lang": "painless", "source": "return params._source.url instanceof List && params._source.url.size() == 1" } } }, "script": { "lang": "painless", "source": "ctx._source.url = ctx._source.url.get(0)" } }
批量操作注意事项
- 如果数据量过大,建议在请求路径后加
?wait_for_completion=false参数异步执行任务,避免请求超时 - 建议先针对小批量测试数据验证逻辑正确性后再执行全量操作
内容的提问来源于stack exchange,提问作者Aurel Drejta
相关产品推荐
相关产品推荐

