Elasticsearchインデックスからドキュメント全体を削除せずに、すべてのドキュメントから値を持つフィールドを削除するには、通常、_update_by_query
API呼び出しを使用します。script
例の場合:上my_properties指数私はそれが存在するすべての文書からすべてのフィールド例えば(キー=>値)を削除したいです。以下のクエリを使用して、存在するすべてのフィードフィールドを削除できますが、この場合、フィードフィールドはテキスト/文字列タイプです
インデックス:my_properties
フィールド:フィード
タイプ:テキスト
フィードの値の例: feed: ["AB-1234"]
POST my_properties/_update_by_query?refresh&conflicts=proceed
{
"script" : "ctx._source.remove('feed')",
"query" : {
"exists": { "field": "feed" }
}
}
私の主な問題は、フィールドタイプがテキスト/文字列ではなくネストされている場合です
インデックス:my_properties
フィールド:feed_v2
タイプ:ネスト
feed_v2の値の例: feed_v2: [{"feed":12},{"id":["AB-9999"]}]
アプローチ1:
POST my_properties/_update_by_query?refresh&conflicts=proceed
{
"script" : "ctx._source.remove('feed_v2')",
"query" : {
"exists": { "field": "feed_v2" }
}
}
アプローチ2:
POST my_properties/_update_by_query?refresh&conflicts=proceed
{
"script" : "ctx._source.feed_v2.remove('feed')",
"query" : {
"exists": { "field": "feed_v2.feed" }
}
}
何も機能しません、何かが足りませんか?わかりませんが、私の推測は-
"query" : {"exists": { "field": "feed_v2" }}
クエリが存在して動作しませんネストされたタイプフィールドと同じように上の削除をしようとしたときに、それが何かを見つけることができなかった理由です
nested
タイプフィールド
参照によると:https://stackoverflow.com/a/53771354/1138192それは私のために働くはずですが、残念ながらそれは私のために働きません。
Elasticsearchにはネストされたデータ型の概念があり、そのためにはネストされたクエリのみが役立ちます。基本的に、existsクエリは次の形式になります。
POST <your_index_name>/_search
{
"query": {
"nested": {
"path": "feed_v2",
"query": {
"exists": {
"field": "feed_v2.feed"
}
}
}
}
}
以下のスクリプトを思いついたネストされたドキュメントからネストされたフィールドを削除するのに役立つクエリを探しています。
どのようにネストされた文書の通常の文書と異なる場合、これに応じてリンク、されるネストされた各オブジェクトは、隠された別の文書として索引付けされるので、あなたが利用しているというクエリは、動作しません。
これは、あなただけ削除したいシナリオのためであるfeed
、すなわちfield_v2.feed
いますが、残りの保存したいfield_v2
フィールドを。
POST resumes/_update_by_query
{
"query": {
"match_all": {}
},
"script": {
"lang": "painless",
"inline": """
for(int i=0; i<ctx._source.field_v2.size(); i++)
{
HashMap myKV = ctx._source.field_v2.get(i);
if(myKV.get(params.key_ref)!=null){
myKV.remove(params.key_ref);
}
}
""",
"params": {
"key_ref": "feed"
}}
}
お役に立てれば!
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加