【发布时间】:2015-04-29 10:14:59
【问题描述】:
我想在我的 ealsticsearch 结果中过滤掉带有讨厌词的文档。目前,我们在所有单词列表的每个搜索查询中都有 bool 过滤器。这会导致大量缓慢的查询,因为仇恨词列表很长(周围有很多仇恨:()
我想知道这种垃圾邮件/仇恨词过滤的最佳做法是什么。
以下是我们正在考虑的:
预处理:在索引之前扫描文档,因此将它们标记为错误或不索引它们。 问题:文档是从多个进程中编入索引的,很难将规则强加于某个人编写的任何新组件。
创建一个过滤器并定期运行它(不确定最佳频率和时间)以将所有带有坏词的文档标记为“badDoc”:true。因此在所有查询中都有一个过滤器。 问题:不确定 percolator 定期运行对性能的影响,其次是所有查询中排除 badDoc 的纪律问题
我个人更喜欢纯 ES 解决方案,我确信这不是一个新问题,因此寻求专家指导和最佳实践。
感谢和问候 瓦伦
【问题讨论】:
-
在文档被索引之前使用过滤器查询将文档“标记”为“坏”。因此,每当您进行更新或索引操作时,请获取文档,针对过滤器运行它,如果匹配,则将其标记为错误并继续进行索引。对于已经编入索引的文档,您需要运行查询来找到它们并标记它们。
-
感谢安德烈的回复。在每个索引之前运行过滤器是否会对性能产生影响?
-
运行 percolator 查询会对性能产生影响,但这会在索引时发生。根据您索引/更改文档的频率,它可能会产生更大或更低的影响。但是您会将更复杂的过滤部分从日常查询中移开。
-
您是否有机会尝试这两种方法并测试性能影响? (渗滤器和同义词列表)
-
我确实为过滤器设置了一个小型原型。通过有和没有过滤器的 1M 文件。我看到一个非常小的延迟。因此,性能很好。但是,对于搜索,我必须在我的搜索查询中做一个额外的存在,它与同义词解决方案具有相同的性能。评估这些我们决定采用不同的解决方案。我在现有的情绪分析器中添加了一个新的情绪仇恨。现在文档被标记为正面/负面/仇恨。我们已经有一个积极的过滤器......所以搜索没有额外的变化。它似乎工作正常。非常感谢您的建议!
标签: elasticsearch