2015-11-06 328 views
0

我從JSON解析文檔,JSON將作爲父文檔的子元素添加。我只是將項目發佈到索引,而不關心該ID。避免Elasticsearch中的重複文檔

有時候會有JSON的更新,並且項目會被添加到它。所以例如我從JSON解析了2個文檔,並在一兩個星期後再次解析相同的JSON。這次JSON包含3個文檔。

我找到如下答案:'remove all children and insert all items。',但我懷疑這是我正在尋找的解決方案。

如果沒有平等的孩子,我可以將每個項目與我的目標父母的孩子進行比較並添加新文檔。

我想知道是否有辦法讓elasticsearch處理重複。

+0

如果ID每次都不同,那麼這是不可能的。 Elasticsearch不處理重複。 –

+0

你可以使用數據庫中的某些主鍵或某種散列機制爲給定文檔生成唯一標識符。如果發佈文檔時未指定_id,ES將爲每個文檔生成'unique' _id,而不管其中的內容 – ChintanShah25

回答

1

複製需要在ID處理本身處理。 爲文檔選擇一個唯一的密鑰並將其作爲_id。在密鑰太大或密鑰太多的情況下,創建一個SHAH校驗和,並將其作爲_id。

如果您已經在數據庫中進行了重複數據刪除,則可以使用與top_hits聚合嵌套的詞彙聚合來檢測這些數據。

你可以閱讀更多關於這種方法here

0

向elasticsearch添加新文檔時,它首先掃描現有文檔以查看是否有任何ID匹配。如果已經存在具有該ID的現有文檔,則將更新文檔而不是添加重複文檔(版本字段將同時更新以跟蹤發生的更新量)。因此,您需要以某種方式跟蹤您的文檔ID,並在整個匹配文檔中維護相同的ID以消除重複的可能性。