弹性搜索中的简单更新字段

Simple update field in elasticsearch

几周前我开始使用 Elsaticsearch 和 Sense。 现在我需要批量更新某个索引的所有文档中的 String 字段,如下所示: 如果字符串以“+”开头,则将字段更新为不带“+”的相同值。

旧:号码:“+212112233” 新:数字:“212112233”

有没有一种简单的方法可以让我使用 REST DSL 来完成,还是我需要使用 Python?

谢谢!

如果您可以安装 update-by-query plugin,有一种方法可以做到。该插件的工作原理是为其提供一个匹配要更新的文档的查询和一个更新匹配文档的脚本。

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_indexyour_typeyour_field 分别替换为您的索引、类型和字段名称。

因此,我们告诉插件更新所有包含以 + 开头的 your_field 值的文档(不知道 your_field 是否是已分析的字符串,这里我们看直接进入 _source 以确保我们检查被索引的原始字符串值),然后我们告诉脚本通过获取值的子字符串来更新每个匹配的文档,而忽略 + 符号。