2012-12-10 41 views
0

需要一些幫助。 我的文檔有一個版本字段。只有更新後的文檔纔會有新的記錄,並增加版本號。ElasticSearch:選擇性查詢

實施例:

{id:1 , version:1,…} 
{id:1 , version:2,….} //This has been updated 
{id:2 , version:1,…} 

在上述例子中ID = 1具有兩個記錄,因爲它已被更新。雖然id​​ = 2有一條記錄,因爲它尚未更新,並且仍然位於版本1上。

現在,在彈性搜索中,是否存在可獲取最大版本的任何查詢。 例如:Get獨特的文件TILL 1版應該給結果:

{id:1 , version:1,…} 
{id:2 , version:1,…} 

雖然獲得獨特的文件,直到第2版應該給:

{id:1 , version:2,….} 
{id:2 , version:1,…} 

(在上面的結果有版本1的混合和第2版​​)

感謝, 卡蘭

回答

1

有沒有簡單的方法在elasticsearch實現這一目標(至少UNT像Field Collapsing/Combining這樣的實現)。我建議維護兩個索引:一個用於自動生成ID的所有版本,另一個索引僅包含最新版本,記錄的id字段作爲ID。當你需要所有版本時,你可以搜索第一個索引,當你只需要最新版本時,你可以搜索第二個索引。

另一種解決方法是以某種方式指示記錄代表最新版本。可以通過添加布爾字段「latest」來完成,這意味着當添加新記錄時,或者您可以添加將跟蹤每條記錄的最新版本的子文檔時,您將不得不使用以前的最新版本對記錄進行重新索引。

+0

嗨伊莫托夫,非常感謝答覆。 – karan1001

+0

嗨Imotov,非常感謝答覆。我試圖在我的Mongo數據庫中實現版本控制。我也試圖避免重複數據。因此只有更新的文件纔會有新版本。在我上面的例子中,id = 1有兩個記錄(版本1和版本2),因爲它已被更新。儘管id = 2仍然在版本1上,因爲它從未更新過。我通過mongo-driver完成了這個處理,然後使用了elasticsearch-mongo-river。現在我的問題是,我需要選擇性地提取一個版本。再次,如果文檔沒有在版本2中更新,那麼我應該得到它的版本1。 – karan1001