我想使用 ElasticSearch 实现关键字黑名单。基本上我想创建一个不允许用户搜索的禁止查询列表。然后我希望能够传入一个检查过的查询并查看它匹配哪些被禁止的查询(如果有的话)。
如果被禁止的查询具有其关键字的子集,则已检查的查询与被禁止的查询匹配。为了说明,让我举一个例子:
- 禁止查询:
- “黑人生活”
- “黑人的命也是命”
- “黑人的生命很重要”
- “黑人的命也是命”
- 检查查询:“黑人的命也是命”
- 火柴:
- “黑人生活”
- “黑人的命也是命”
只有前两个被禁止的查询匹配,因为它们是检查查询的严格子集。第三个被禁止的查询不匹配,因为它使用“事项”,而不是“事项”。最后一个被禁止的查询不匹配,因为它不是“黑人的命也是命”的严格子集,因为它有一个额外的关键字“rulez”。
有人告诉我,实现这一点的最佳方法是渗透指数。我的问题是如何创建一个渗透查询来实现与检查查询(传入文档)的子集匹配?
这是有关渗透查询的文档页面:https ://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-percolate-query.html
这是关于子集匹配的相关答案: https ://discuss.elastic.co/t/subset-in-an-array/237459