簡體   English   中英

如何使用NEST更新ElasticSearch索引內的現有文檔?

[英]How to update an existing document inside an ElasticSearch index using NEST?

我正在嘗試對我的Elasticsearch索引中的文檔進行索引更新。

作業在一天中定期運行,以標識自上次運行作業以來已更新的數據庫記錄。 我希望能夠更新索引中的這些特定記錄。 記錄中的任何字段都可能已更改。

所以我填充數據集,然后遍歷記錄以使用數據庫中的所有屬性填充類的實例。

每次我想更新索引中的相應記錄或如果它當前不存在添加它...

在我的循環中,我正在嘗試像這樣的代碼來進行更新...

client.Update<MyContentClass>(u => u
                .Id("AU-7zORce3_kxnyDoVLv")
                .Index("qubecontent")
                //.Doc(new MyContentClass { ESUniqueKey = MyContentClassInstance.ESUniqueKey })
                .DocAsUpsert()
                .Refresh()
                );

我不確定ID是指什么? 這是Elasticsearch為每個索引記錄自動生成的ID嗎? 我的確在班級內生成了一個額外的唯一ID,但不確定如何引用它?

誰能建議我如何對更改的記錄執行此索引更新?

upsert中的ID字段確實引用了內部ElasticSearch ID(將其視為ES的主鍵)。 如果您已經擁有自己的唯一主鍵,則也可以將其用作ES中的主鍵。 請看以下示例:

示例1:讓ES生成自己的ID

POST test/type1
{
  "f1": "record 1",
  "f2": "2000-01-01"
}

結果1:

{
   "_index": "test",
   "_type": "type1",
   "_id": "AU--Dz-Kl6g2APRJ9y7l",
   "_version": 1,
   "created": true
}

您可以看到ES生成了它自己的主鍵“ AU--Dz-Kl6g2APRJ9y7l”

示例2:確認您自己的ID

POST test/type1/thisIsMyID
{
  "f1": "record 1",
  "f2": "2000-01-01"
}

結果2:

{
   "_index": "test",
   "_type": "type1",
   "_id": "thisIsMyID",
   "_version": 1,
   "created": true
}

請注意,在示例2中它如何使用我指定的ID。 一旦使用與ES相同的主鍵,就可以運行upsert語句。

注意:如果您要重新生成整個文檔,而您真正想要做的就是覆蓋舊文檔,然后覆蓋舊文檔。 然后,您可以再次使用相同的ID進行POST,它將用新記錄覆蓋舊記錄。 覆寫便一路比upserting更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM