Elasticsearchインデックス内の特定のプロパティのすべてのエントリを削除し、そのプロパティのすべてのタイプマッピングを削除する方法を見つけようとしています。
私は次の2つのドキュメントページを見てきました: マッピングを置く と マッピングを削除する
2番目のリンクから:
「マッピング(タイプ)とそのデータの削除を許可します。RESTエンドポイントは/ {index}/{type}でDELETEメソッドを使用します。」
必要だと思うのは/{index}/{type}/{property}
?
これを実現するには、インデックス全体を再作成する必要がありますか?つまり、タイプ間でデータを移動および操作する必要がありますか?
たとえば、マッピングでGETを呼び出すと次のようになります。
curl -XGET 'http://.../some_index/some_type/_mapping'
結果:
{
"some_type": {
"properties": {
"propVal1": {
"type": "double",
"index": "analyzed"
},
"propVal2": {
"type": "string",
"analyzer": "keyword"
},
"propVal3": {
"type": "string",
"analyzer": "keyword"
}
}
}
}
propVal3
でのこの削除操作の後、次が返されます。
curl -XGET 'http://.../some_index/some_type/_mapping'
結果:
{
"some_type": {
"properties": {
"propVal1": {
"type": "double",
"index": "analyzed"
},
"propVal2": {
"type": "string",
"analyzer": "keyword"
}
}
}
}
propVal3
のすべてのデータはインデックスから削除されます。
それをしてはいけない。この値が存在することを忘れてください... ;-)本当に削除する必要がある場合は、ドキュメントのインデックスを再作成する必要があります。
これには新しい_reindex
apiを使用できます。また、インデックスの再作成を実行する前に、新しい_mapping
をdestインデックスに配置して、インデックスのフィールドのプロパティを変更することもできます。
インデックスの再作成とプロパティの削除を行うには、次のようにします。
POST /_reindex
{
"source": {
"index": "Twitter"
},
"dest": {
"index": "new_Twitter",
},
"script": {
"inline": "ctx._source.remove('whatever')"
}
}
これを _ aliases API と組み合わせて使用する場合は、「ダウンタイム」なしでインデックスを変更できます。
現在、マッピングからプロパティを削除することはできません。すべてのレコードからプロパティのすべての値を削除するには、このプロパティを削除してすべてのレコードのインデックスを再作成する必要があります。