首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ElasticSearch黑名单(子集匹配)

ElasticSearch黑名单(子集匹配)
EN

Stack Overflow用户
提问于 2021-08-10 23:15:28
回答 1查看 326关注 0票数 0

我想使用ElasticSearch实现关键字黑名单。基本上,我想创建一个被禁止的查询列表,用户是不允许搜索的。然后,我希望能够传递一个检查过的查询,并查看它与哪些禁用的查询匹配(如果有的话)。

如果禁用查询有其关键字的子集,则选中的查询与禁用查询匹配。为了举例说明,让我举一个例子:

  • 禁用查询:
    • “黑人生活”
    • “黑人生命重要”
    • “黑人的生命很重要”
    • “黑人生命重要规则”

  • 勾选查询:“黑人生命重要”
  • 匹配:
    • “黑人生活”
    • “黑人生命重要”

只有前两个被禁止的查询匹配,因为它们是选中查询的严格子集。第三个被禁止的查询不匹配,因为它使用的是"matters",而不是"matter“。最后一个被禁止的查询不匹配,因为它不是“黑色生命重要”的严格子集,因为它有一个额外的关键字"rulez“。

有人告诉我,实现这个目标的最好方法是一个渗滤指数。我的问题是如何创建一个percolate查询来实现与检查的查询(传入的文档)的子集匹配?

下面是关于percolate查询的文档页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-percolate-query.html

下面是有关子集匹配的相关答案:https://discuss.elastic.co/t/subset-in-an-array/237459

EN

回答 1

Stack Overflow用户

发布于 2021-08-11 02:50:47

实现用例的最佳方法是使用渗滤查询

使用索引数据、映射、搜索查询和搜索结果添加工作示例

索引映射:

代码语言:javascript
运行
复制
{
  "mappings": {
    "properties": {
      "field": {
        "type": "text"
      },
      "query": {
        "type": "percolator"
      }
    }
  }
}

索引数据:

代码语言:javascript
运行
复制
{
  "query": {
    "match": {
      "field": {
        "query": "black lives matter rulez",
        "operator": "AND"
      }
    }
  }
}
{
  "query": {
    "match": {
      "field": {
        "query": "black lives matters",
        "operator": "AND"
      }
    }
  }
}
{
  "query": {
    "match": {
      "field": {
        "query": "black lives matter",
        "operator": "AND"
      }
    }
  }
}
{
  "query": {
    "match": {
      "field": {
        "query": "black lives",
        "operator": "AND"
      }
    }
  }
}

搜索查询:

代码语言:javascript
运行
复制
{
  "query": {
    "percolate": {
      "field": "query",
      "document": {
        "field": "black lives matter"
      }
    }
  }
}

搜索结果:

代码语言:javascript
运行
复制
"hits": [
      {
        "_index": "68734373",
        "_type": "_doc",
        "_id": "2",
        "_score": 0.39229372,
        "_source": {
          "query": {
            "match": {
              "field": {
                "query": "black lives matter",
                "operator": "AND"
              }
            }
          }
        },
        "fields": {
          "_percolator_document_slot": [
            0
          ]
        }
      },
      {
        "_index": "68734373",
        "_type": "_doc",
        "_id": "1",
        "_score": 0.26152915,
        "_source": {
          "query": {
            "match": {
              "field": {
                "query": "black lives",
                "operator": "AND"
              }
            }
          }
        },
        "fields": {
          "_percolator_document_slot": [
            0
          ]
        }
      }
    ]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68734373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档