2015-06-21 282 views
0

這也許一個愚蠢的問題,但我現在用的是每天滾動索引保存我的logstash事件時,配置也很簡單:Elasticsearch每天滾動索引包含重複的_id

input: {..source..} 
filter: {..filter..} 
output: { 
elasticsearch: { 
    document_id: %{my_own_guarantee_unique_id} 
    index: myindex-%{+YYYY.MM.DD} 
} 
} 

什麼我發現了,如果有具有相同my_own_guarantee_unique_id的事件會在不同的日期出現,它會在這些日常滾動指數中創建多次,即。您可以在myindex-2015.06.21和myindex-2015.06.22中找到出現_id = 123的事件

是這種重複出箱?我該怎麼做才能避免它?任何建議或閱讀將不勝感激,謝謝!

回答

1

由於您使用多個索引,每天一個索引,您可以得到相同的_id。使文檔唯一的是uid,它是索引,類型和id的組合。彈性沒有辦法改變我的知識。

+0

這很有道理Jettro。由於我使用的是logstash,在保存文檔時是否有一種方法可以使用'_uid'而不是'_id'? –

+0

如果您想要做的是更新文檔,如果具有相同ID的文檔長度超過您可以通過更改日誌存儲配置中索引的模板將它們插入到一個大型索引中。問題是索引之間沒有關係。無法控制不同索引的唯一性。 –

+1

同意Jettra,我最終做出了一個自定義logstash過濾器,通過通配符(logstash- *)發送查詢到相關索引以查找具有該「_id」的記錄,並且如果有現有記錄並且不屬於當天的索引,它將刪除它們,並將當前事件插入當前索引 - 有點笨拙,但有效 –

0

我有完全相同的問題:幾個重複的文件具有相同的id,但在不同的索引(我有1索引/日期)。

對我而言,有效的方法是使用索引名稱生成一個字段,並在logstash配置的輸出部分重新使用它。

index => "%{index_name}" 
document_id => "%{clickID}"