1

どこかで、「作成」と「作成または更新」の両方のオプションがあるという印象を受けました。一括アップロードで各ソースの _id 競合に対する動作を指定できるようにしたいと考えています。特定されたレコードが存在しない場合は作成し、存在する場合は更新する必要があります。他の人は、レコードが存在しない場合は作成し、存在する場合は何もしません。

以下の例は、「更新または作成」を行うようです

{ "index" : { "_index" : "test", "_type" : "type1", "_id" : "1" } }
{ "field1" : "value1" }

インデックス/タイプ/IDのレコードが存在する場合、これは「作成」のみで更新されないことを願っています

{ "create" : { "_index" : "test", "_type" : "type1", "_id" : "3" } }
{ "field1" : "value3" }

これを実現するための最良の方法の提案をお待ちしています。誰かが最初にそこに着かない場合、私が見つけたものは何でも投稿します。

4

2 に答える 2

0

操作系の特徴は答えるべきだと思います。

ドキュメントからの抜粋

オペレーション タイプ インデックス オペレーションはop_type、作成オペレーションを強制するために使用できる も受け入れます。これにより、put-if-absent動作が可能になります。create を使用すると、その ID のドキュメントがインデックスに既に存在する場合、インデックス操作は失敗します。

op_typeパラメータの使用例を次に示します。

$ curl -XPUT 'http://localhost:9200/twitter/tweet/1?op_type=create' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elastic Search"
}'

create を指定する別のオプションは、次の URI を使用することです。

$ curl -XPUT 'http://localhost:9200/twitter/tweet/1/_create' -d '{
    "user" : "kimchy",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "trying out Elastic Search"
}'
于 2012-10-05T07:05:34.713 に答える
0

スクリプト機能を使用して、2.0 でこれを行うことができるようです。https://github.com/elasticsearch/elasticsearch/issues/2008

現在、私は2つのリクエストでそれをやっています。最初に _create を実行して新しいドキュメントを追加し、次に update を実行して既存のドキュメントを変更します。

于 2012-10-20T14:04:42.180 に答える