2016-07-27 10 views
0

私は、アカウント番号、州、名字、lastname.iamを持つ銀行口座データセットを持っています。次のコマンドを書いて、州のCA antonyに。文字列フィールドに基づいて弾性検索を更新する方法

curl -XPOST 'localhost:9200/bank/_update_by_query?pretty' -d '{ 
"query" : { 
    "term" : {"state":"CA"} 
}, 
"script" : { 
    "inline" : "ctx._source.firstname = a", 
    "params" : { 
    "a" : "antony" 
    }, 
    "lang" : "groovy" 
} 
}' 

結果:、3 "TIMED_OUT":

{ "が取った" 偽、 "合計":0、 "更新":0、 "バッチ":0、 "version_conflicts":0、 "noops":0、 "再試行":0、 "失敗":[] }レコードの

なし更新されなかっ得ています。

ありがとうございます。あなたのstateフィールド以来

+0

実行しているESのバージョンは? [動的スクリプトを有効にする](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html#enable-dynamic-scripting)をお持ちですか? – Val

+0

バージョン2.3.4。はい、私は動的スクリプトを有効にしました –

+0

は '分析'または 'not_analyzed'の' state'フィールドですか?つまり、クエリを個別に実行すると、いくつのドキュメントが得られますか? – Val

答えて

1

analyzed(デフォルトでは)、あなたは

curl -XPOST 'localhost:9200/bank/_update_by_query?pretty' -d '{ 
"query" : { 
    "match" : {"state":"CA"} 
}, 
"script" : { 
    "inline" : "ctx._source.firstname = a", 
    "params" : { 
    "a" : "antony" 
    }, 
    "lang" : "groovy" 
} 
}' 
+0

ありがとうございました。今働いている。 –

+0

すごく、うれしかった! – Val

-2

あなたがしたい場合は、代わりterm 1のmatchクエリを使用(またはcaからtermクエリが、小文字CAを維持)する必要がありますあなたのファイル化された状態のマッピングを更新してから、最初にマッピングを削除し、2.xで再度作成する必要があります。更新中にEs 2.2でマッピングが正しく更新されないからです。

Elatic検索ドキュメントを1として: 私たちは、新しいフィールドを追加するためのマッピングを更新することができますが、我々は、分析からnot_analyzedに既存のフィールドを変更することはできません。

まず、マッピングのバックアップを取ることができます。下のリンクを使用して削除します。 カール-XDELETE「http://host.sachin.com:9999/ecmviews/?pretty

マッピングを削除した後、Uはあなたに同じバックアップマッピングをすることができますし、状態は以下のように提出更新: 「状態」:{ 「タイプ」:「文字列」、 「インデックス」 :カールbackets }なし カール-XPUT 'http://host.sachin.com:9999/ecmviews' -D「{ マッピング・JSON:コマンドの下に使用

および更新マッピングJSON、 } "not_analyzed"。応答としてack:trueを使用してマッピングを更新します。 マッピングを更新した後、クエリを試すことができます。それが動作します。

+0

これは自己プロモーションのようですが、ガイドライン内で完了していないとスパムとみなされます。参照してください:[スパマーにならないようにする方法](http://stackoverflow.com/help/promotion)。 – Makyen

+0

コードとエラーをテキストとして[コードフォーマットを使用して]追加してください(http://stackoverflow.com/editing-help#code)。 – Makyen

関連する問題