[英]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.