0

数週間前に Elsaticsearch と Sense を使い始めました。次のように、特定のインデックスのすべてのドキュメントの文字列フィールドを一括更新する必要があります。文字列が「+」で始まる場合、フィールドを「+」なしで同じ値に更新します。

旧: 番号: "+212112233" 新: 番号: "212112233"

REST DSL でそれを行う簡単な方法はありますか、それとも Python を使用する必要がありますか?

ありがとう!

4

1 に答える 1

0

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_index置き換えyour_typeます。your_field

your_fieldそのため、プラグインに、で始まる値を含むすべてのドキュメントを更新するように指示します+(分析された文字列であるかどうかはわかりません。ここでは、インデックス化された生の文字列値を確認するために をyour_field直接調べます)。_source値の部分文字列を取得して+符号を除外することにより、一致する各ドキュメントを更新するスクリプト。

于 2015-06-01T03:56:51.643 に答える