2017-02-21 54 views
0

當我執行索引調用時,如果具有相同ID的文檔已經存在,是否可以使調用失敗?ElasticSearch C#NEST - 如何防止覆蓋文檔

我看到警告正在發佈,但原始文檔仍然被覆蓋。

+0

對downvote發表評論會非常有幫助,所以我會知道問題的錯誤。 – Thomas

回答

1

您可以通過使用_create終點,或者通過指定OpType.Create索引文件

var client = new ElasticClient(); 

// using OpType.Create 
client.Index(new Test { Id = 1, Message = "message 1" }, i => i 
    .OpType(OpType.Create) 
); 

// using _create endpoint 
client.Create(new Test { Id = 1, Message = "message 1" }); 

如果文件已經存在,一個HTTP 409衝突則會返回時實現這一目標。在這兩種情況下,您都需要一個用於索引/創建的文檔的ID。

+0

IndexMany有沒有類似的地方可以跳過已經存在的文檔? – Thomas

+0

不跳過,但返回409,是的。 'IndexMany'只是'_bulk' API的一個便利,它提供了批量創建,更新,索引和刪除操作。查看批量API測試的不同操作示例:https://github.com/elastic/elasticsearch-net/blob/5.x/src/Tests/Document/Multiple/Bulk/BulkApiTests.cs#L74-L89 –