2015-04-28 22 views
2

我想在我的ealstic搜索結果中用仇恨詞過濾掉文檔。目前我們在所有單詞列表的每個搜索查詢中都有布爾過濾器。而這將導致噸查詢速度慢的,因爲恨字列表很長(這麼多的仇恨周圍:()用仇恨詞過濾Elasticsearch結果的最佳解決方案是什麼?

我想知道什麼是最好的做法,這種垃圾郵件/仇恨的話過濾。

下面是我們正在考慮:

  1. 預過程:掃描文檔的索引之前,因此將它們標記爲壞的或不索引他們 問題:該文件是由幾個進程索引,也很難強制規定任何一個新的組件寫一些。

  2. 創建一個percolator並定期運行(不確定最佳頻率和時間),將所有帶有不良詞語的文檔標記爲「badDoc」:true。因此在所有查詢中都有一個過濾器。 問題:不知道對性能的影響,由於過濾器的定期運行,在所有查詢紀律其次同樣的問題,以排除badDoc

我個人傾向純粹ES解決方案,我相信這不是一個新問題,因此尋求專家指導和最佳實踐。

感謝和問候 Varun的

+0

使用percolator查詢將文檔「標記」爲「壞」_before_它被索引。因此,無論什麼時候進行更新或索引操作,都需要將文檔拿到文檔上,然後針對滲濾器運行​​,如果匹配,則將其標記爲不合格,然後繼續進行索引。至於已經索引的文檔,您需要運行查詢來查找並標記它們。 –

+0

感謝Andrei的迴應。在每個索引之前運行percolator會對性能產生影響嗎? – lazywiz

+0

運行percolator查詢會有性能影響,但這會在索引時發生。根據您索引/更改文檔的頻率,它可以產生更大的影響或更低。但是您可以將更復雜的過濾部分從日常查詢中移走。 –

回答

3

使用過濾器標記爲壞文件也將需要定義一個過濾器,其中包括所有的「仇恨的話」的搜索條件。

沒有過濾器的一種可能的解決方案可能是定義一個同義詞列表(如果不是已經使用的話)或擴展分析器中已有的同義詞文件。你可以爲所有「仇恨詞」定義一個同義詞,以便它們被一個單詞「badbaddocument」替代。現在,在查詢過程中,您可以使用包含單個術語的簡單布爾過濾器過濾掉不良文檔。

+0

這似乎是一個優雅的把戲!謝謝。 – lazywiz

相關問題