【问题标题】:What is the best solution for filtering out Elasticsearch results with hate words?用讨厌的词过滤掉 Elasticsearch 结果的最佳解决方案是什么?
【发布时间】:2015-04-29 10:14:59
【问题描述】:

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

我想知道这种垃圾邮件/仇恨词过滤的最佳做法是什么。

以下是我们正在考虑的:

  1. 预处理:在索引之前扫描文档,因此将它们标记为错误或不索引它们。 问题:文档是从多个进程中编入索引的,很难将规则强加于某个人编写的任何新组件。

  2. 创建一个过滤器并定期运行它(不确定最佳频率和时间)以将所有带有坏词的文档标记为“badDoc”:true。因此在所有查询中都有一个过滤器。 问题:不确定 percolator 定期运行对性能的影响,其次是所有查询中排除 badDoc 的纪律问题

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

感谢和问候 瓦伦

【问题讨论】:

  • 在文档被索引之前使用过滤器查询将文档“标记”为“坏”。因此,每当您进行更新或索引操作时,请获取文档,针对过滤器运行它,如果匹配,则将其标记为错误并继续进行索引。对于已经编入索引的文档,您需要运行查询来找到它们并标记它们。
  • 感谢安德烈的回复。在每个索引之前运行过滤器是否会对性能产生影响?
  • 运行 percolator 查询会对性能产生影响,但这会在索引时发生。根据您索引/更改文档的频率,它可能会产生更大或更低的影响。但是您会将更复杂的过滤部分从日常查询中移开。
  • 您是否有机会尝试这两种方法并测试性能影响? (渗滤器和同义词列表)
  • 我确实为过滤器设置了一个小型原型。通过有和没有过滤器的 1M 文件。我看到一个非常小的延迟。因此,性能很好。但是,对于搜索,我必须在我的搜索查询中做一个额外的存在,它与同义词解决方案具有相同的性能。评估这些我们决定采用不同的解决方案。我在现有的情绪分析器中添加了一个新的情绪仇恨。现在文档被标记为正面/负面/仇恨。我们已经有一个积极的过滤器......所以搜索没有额外的变化。它似乎工作正常。非常感谢您的建议!

标签: elasticsearch


【解决方案1】:

使用过滤器标记为坏文档还需要定义一个过滤器,其中包括所有“仇恨词”的搜索条件。

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

【讨论】:

    猜你喜欢
    • 2023-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多