2015-09-11 69 views
0

即時嘗試索引更新我的elasticsearch索引內的文件。如何使用NEST更新ElasticSearch索引內的現有文檔?

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

所以我填充一個數據集,然後通過記錄循環來填充我的類的一個實例與數據庫中的所有屬性。

每次我想更新相應的記錄在索引或添加,如果當前犯規存在,

...

我的循環IM中嘗試一些像這樣的代碼來執行更新...

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

即時通訊不知道標識符是什麼引用?這是elasticsearch爲每個索引記錄自動生成的id嗎?我在課堂中生成了一個額外的唯一ID,但不知道我如何引用它?

任何人都可以告訴我如何執行此更新記錄的索引更新?

回答

0

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:Epecify自己的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語句。

注意:如果您正在重新生成整個文檔,並且您真正想要執行的操作是覆蓋舊版vs舊版。然後,您可以再次使用相同的ID進行POST,它會用新記錄覆蓋舊記錄。覆蓋將是方式比插入更快。

相關問題