Elasticsearch/Kibana 5.2中如何针对索引字段执行查找替换?
在Elasticsearch 5.2中实现特定字段值的查找替换
可以针对索引的特定字段值执行查找替换操作,针对你的需求,直接使用Elasticsearch的_update_by_query API就能完成,具体操作如下:
执行批量更新命令
通过curl调用API,匹配State字段值为"Jammu & Kashmir"的文档,然后替换其中的&为"and":
curl -XPOST 'http://your-es-host:9200/States_of_India/_update_by_query?conflicts=proceed' -H 'Content-Type: application/json' -d' { "query": { "term": { "State.keyword": "Jammu & Kashmir" } }, "script": { "inline": "ctx._source.State = ctx._source.State.replace(''&'', ''and'')", "lang": "painless" } } '
关键部分说明
- query条件:用
term查询匹配State.keyword(如果State是text类型,需要用keyword子字段精确匹配完整字符串);若你的State字段本身是keyword类型,直接写State即可。 - script脚本:使用painless脚本(Elasticsearch 5.x默认支持),通过
replace方法替换字符串中的指定字符,注意curl命令里的单引号需要用双单引号转义。 - conflicts=proceed:如果更新过程中有版本冲突,继续执行后续更新,避免因个别文档冲突导致整个操作中断。
前置检查建议
- 先执行查询确认匹配的文档数量是否正确:
curl -XGET 'http://your-es-host:9200/States_of_India/_search' -H 'Content-Type: application/json' -d' { "query": { "term": { "State.keyword": "Jammu & Kashmir" } } } '
- 确保Elasticsearch允许执行内联脚本:检查
elasticsearch.yml中的script.inline: on(5.2版本默认允许,若修改过配置需调整)。
内容的提问来源于stack exchange,提问作者nishant
相关产品推荐
相关产品推荐

