几周前我开始使用 Elsaticsearch 和 Sense。现在我需要批量更新某个索引的所有文档中的字符串字段,如下所示:如果字符串以“+”开头,则将该字段更新为没有“+”的相同值。
旧:号码:“+212112233” 新:号码:“212112233”
有没有一种简单的方法可以让我使用 REST DSL 或者我需要使用 Python?
谢谢!
几周前我开始使用 Elsaticsearch 和 Sense。现在我需要批量更新某个索引的所有文档中的字符串字段,如下所示:如果字符串以“+”开头,则将该字段更新为没有“+”的相同值。
旧:号码:“+212112233” 新:号码:“212112233”
有没有一种简单的方法可以让我使用 REST DSL 或者我需要使用 Python?
谢谢!
如果您可以安装update-by-query 插件,那么有办法做到这一点。该插件通过给它一个匹配要更新的文档的查询和一个更新匹配文档的脚本来工作。
curl -XPOST localhost:9200/your_index/your_type/_update_by_query -d '
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "_source[\"your_field\"].indexOf(\"+\") == 0"
}
}
}
},
"script": "ctx._source.your_field = ctx._source.your_field.substring(1);"
}'
注意:将your_index
,your_type
和your_field
分别替换为您的索引、类型和字段名称。
因此,我们告诉插件更新包含以your_field
开头的值的所有文档+
(不知道是否your_field
是已分析的字符串,这里我们直接_source
查看以确保我们检查被索引的原始字符串值)然后我们告诉脚本通过取值的子字符串省略+
符号来更新每个匹配的文档。