2016-07-31 3 views
1

私はドキュメントを作成または置き換えようとしていますが、APIドキュメントではこれを行う方法が明確ではありません。Elasticsearchでドキュメントを作成または置き換える方法は?

upsert例は1counter値で作成された文書を示しています

client.update({ 
    index: 'myindex', 
    type: 'mytype', 
    id: '777', 
    body: { 
     script: 'ctx._source.counter += 1', 
     upsert: { 
      counter: 1 
     } 
    } 
}, function(error, response) { 
    // ... 
}) 

私はインクリメントスクリプトを必要としないので、私はちょうど自分自身でアップサートを送信しようが、私は得ます400 Validation Failed: 1: script or doc is missing

client.update({ 
    index: "testindex", 
    type: "testType", 
    id: 1234, 
    body: { 
     upsert: { 
      itworks: true, 
      ok: "oh yeah" 
     } 
    } 
}) 

さて、愚かな何かを試してみて、二度のドキュメントが含まれてみましょう。

client.update({ 
    index: "testindex", 
    type: "testType", 
    id: 1234, 
    body: { 
     upsert: { 
      itworks: true, 
      ok: "oh yeah" 
     }, 
     doc: { 
      itworks: true, 
      ok: "oh yeah" 
     } 
    } 
}) 

実際に201初出、働いていた:かつてそうでない場合は、新規ドキュメントを作成するために使用される1、および一度upsertの下では、あった場合、おそらく既存のドキュメントに代わるdoc、下。 OK 200私は別のものでドキュメントを交換するためにそれを繰り返す:

client.update({ 
    index: "testindex", 
    type: "testType", 
    id: 1234, 
    body: { 
     upsert: { 
      whatever: "man" 
     }, 
     doc: { 
      whatever: "man" 
     } 
    } 
}) 

しかし、私はDOC(client.get({index: "testindex", type: "testType", id: 1234}))をチェックしたときに、私が代わりに既存のドキュメントを置き換えるので、新しいドキュメントが、それと合併されたことがわかります。

標準のNodeクライアントとElasticsearchのドキュメントを置き換えるだけですか? HTTP APIはそれをso simpleのように見せていますが、成功していないノードクライアントではその一連の並べ替えを試しました。置き換えコマンドはありませんか?削除してから作成する必要がありますか?

答えて

3

文書を置き換えるには、同じIDの文書にインデックスを付けるだけで、自動的に置き換えられます。

ドキュメントを更新する場合は、スクリプトによる更新、部分的な更新、またはその両方を行うことができます。

は、部分的なドキュメントの更新を行うには、あなただけで

部分文書の更新:

client.update({ 
    index: 'myindex', 
    type: 'mytype', 
    id: '1', 
    body: { 
    // put the partial document under the `doc` key 
    doc: { 
     title: 'Updated' 
    } 
    } 
}, function (error, response) { 
    // ... 
}) 

スクリプト更新:Elasticsearchで

client.update({ 
    index: 'myindex', 
    type: 'mytype', 
    id: '1', 
    body: { 
    script: 'ctx._source.tags += tag', 
    params: { tag: 'some new tag' } 
    } 
}, function (error, response) { 
    // ... 
}); 

詳細情報はJS documentation

+0

同じIDを持つ 'create'呼び出しは、409 Conflict:ドキュメントが存在するか、または既存のバージョンと一致しないバージョンを含む場合、バージョンの競合を返します。 –

+2

'create'の代わりに' index'を試してください –

+0

それだけです!私はその言葉を推測することはなかった。私はインデックスがRDBMSでどのように使われているかのようにインデックスを考えていました。 –

1

これはの一つであります理由は、私は常にインデックスの代わりに使用します:

関連する問題