过滤掉带有仇恨词的 Elasticsearch 结果的最佳解决方案是什么?

What is the best solution for filtering out Elasticsearch results with hate words?

我想在我的 ealsticsearch 结果中过滤掉带有仇恨词的文档。目前我们在所有单词列表的每个搜索查询中都有 bool 过滤器。这导致大量缓慢的查询,因为仇恨词列表很长(围绕 :( )

的仇恨太多了

我想知道此 spam/hate 字词过滤的最佳做法是什么。

以下是我们正在考虑的内容:

  1. 预处理:在编制索引之前扫描文档,然后将其标记为不良或不编制索引。 问题:文档是从多个进程编制索引的,很难在某人编写的任何新组件上强制执行规则。

  2. 创建一个过滤器并 运行 它定期(不确定最佳频率和时间)将所有含有不良词的文档标记为 "badDoc" :正确。因此在所有查询中都有一个过滤器。 问题:不确定由于过滤器的周期性 运行 造成的性能影响,其次是所有查询中排除 badDoc

  3. 的相同纪律问题

就我个人而言,我更喜欢纯 ES 解决方案,我相信这不是一个新问题,因此寻求专家指导和最佳实践。

感谢和问候 瓦伦

使用 percolator 标记为不良文档还需要定义一个 percolator,其中包括所有 "hate words".

的搜索条件

一种不使用过滤器的可能解决方案是定义同义词列表(如果尚未使用)或扩展分析器中已经存在的同义词文件。您可以为所有 "hate words" 定义一个同义词,以便它们被单个术语替换,例如 "badbaddocument"。现在,在查询期间,您可以使用包含单个术语的简单布尔过滤器过滤掉不良文档。