2017-08-25 3 views
0

インデックスに既存のフィールド(response)の新しいmulti fieldraw)を追加しました。新しいマルチフィールドrawにはデータがないため、私は以下のようにソースからデータを追加しようとしました。update_by_queryマルチフィールド

POST /y_metrics/response/_update_by_query 
{ 
    "script":{ 
    "inline": "ctx._source.response['raw'] = ctx._source.response;" 
    }, 
    "query": { 
     "match_all": {} 
    } 
} 

は失敗します。

"type": "missing_property_exception", 
"reason": "No such property: raw for class: java.lang.String" 

第二試み:

POST /y_metrics/response/_update_by_query 
{ 
    "script":{ 
    "inline": "ctx._source['response.raw'] = ctx._source.response;" 
    }, 
    "query": { 
     "match_all": {} 
    } 
} 

は失敗します。

"type": "mapper_parsing_exception", 
    "reason": "Field name [response.raw] cannot contain '.'" 

明らかに、問題は「。」のためにあるようです。しかし、他の人がこの場合にmulti fieldにアクセスするにはどうすればよいでしょうか?私は約de_dotフィルタを読む私の場合に役立ちますか?

答えて

1

既存のフィールド(したがって、マルチフィールド)にフィールドを追加する場合は、スクリプトを使用する必要がちょうどインデックスを再作成し、Elasticsearchが残りを処理します、ありません。クエリの呼び出しによって、更新の一部を削除することができます。script

+0

ありがとうございました。もし私が 'reindex'すれば新しいインデックスを作成しませんか?インデックス名をそのまま保持したいからです。ですから、 'script'を使わずにクエリを実行するだけで、' reindex'と同じことができますか? – ulab

+0

reindex update_by_queryの唯一の違いは、再インデックスを使用して別のインデックスにインデックスを付け、クエリで更新できないという事実です。 – alr

+0

ありがとうございました。 'update_by_query'を' script'なしで実行した後、より多くの結果を見ることができます。 – ulab

関連する問題