關(guān)于數(shù)據(jù)插入ES去重的問題骂租,一直在尋找解決辦法,最笨的方法就是每次插入前進(jìn)行查詢斑司,這種方法的優(yōu)點(diǎn)就是能夠保證數(shù)據(jù)在ES索引中是唯一的渗饮,缺點(diǎn)就是每次插入前都進(jìn)行查詢有些浪費(fèi)時(shí)間,并不是大多數(shù)文檔插入都會(huì)重復(fù)
方法一
將文檔哈希作為文檔在索引中的 _id
值宿刮,同時(shí)插入時(shí)op_type
設(shè)置為 create
互站,
優(yōu)點(diǎn):這樣可以避免每次插入都查詢,_id重復(fù)的文檔不需要提前查詢僵缺,ES會(huì)跳過該文檔
缺點(diǎn):實(shí)驗(yàn)驗(yàn)證胡桃,不同分片shard
中還是會(huì)存在相同_id
值,只能夠解決同一個(gè) shard
中的重復(fù)問題
方法二
在數(shù)據(jù)檢索階段使用折疊字段(collapse) 的方法對(duì)檢索結(jié)果去重
這種方法不需要在存儲(chǔ)中對(duì)數(shù)據(jù)進(jìn)行去重磕潮,只需要指定字段對(duì)結(jié)果進(jìn)行折疊翠胰,就可以達(dá)到查詢時(shí)沒有重復(fù)文檔的效果
結(jié)論
上述兩種方法應(yīng)該結(jié)合起來,第一種方法在物理存儲(chǔ)中自脯,盡量減少重復(fù)文檔之景,第二種方法在第一種方法的基礎(chǔ)上膏潮,在查詢階段去掉重復(fù)文檔锻狗,可以達(dá)到最高效率轻纪。
ES 除了在插入前查詢的方式叠纷,還沒有找到一種方法能夠做到存儲(chǔ)階段完成完美的去重,因此 collapse 字段折疊的使用是目前能夠找到的最優(yōu)解