数週間前に Elsaticsearch と Sense を使い始めました。次のように、特定のインデックスのすべてのドキュメントの文字列フィールドを一括更新する必要があります。文字列が「+」で始まる場合、フィールドを「+」なしで同じ値に更新します。
旧: 番号: "+212112233" 新: 番号: "212112233"
REST DSL でそれを行う簡単な方法はありますか、それとも Python を使用する必要がありますか?
ありがとう!
数週間前に Elsaticsearch と Sense を使い始めました。次のように、特定のインデックスのすべてのドキュメントの文字列フィールドを一括更新する必要があります。文字列が「+」で始まる場合、フィールドを「+」なしで同じ値に更新します。
旧: 番号: "+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_index
置き換えyour_type
ます。your_field
your_field
そのため、プラグインに、で始まる値を含むすべてのドキュメントを更新するように指示します+
(分析された文字列であるかどうかはわかりません。ここでは、インデックス化された生の文字列値を確認するために をyour_field
直接調べます)。_source
値の部分文字列を取得して+
符号を除外することにより、一致する各ドキュメントを更新するスクリプト。