如何在 Elasticsearch 中将术语查询和布尔查询组合在一起

Bs *_* He 2 elasticsearch elasticsearch-dsl elasticsearch-dsl-py

最初,我会filter在 bool 查询中添加一个。然而,当我转向 时terms filter文件表明它terms query现在应该被替换。所以,我理解这一点为我们需要构建既具有复合查询terms querybool query。如果我是正确的,我应该如何编写查询?

注意:我使用 elasticsearch 的 Python API。

Nis*_*ini 6

现在有两种类型的上下文:查询上下文和过滤上下文。查询上下文中的任何查询子句都会对匹配文档的分数做出贡献,即文档与查询的匹配程度,而过滤器上下文中的任何查询子句确定文档是否匹配以及对分数没有贡献。

所以在下面的查询中,我标记了两个上下文:

{
  "query": { 
    "bool": { 
      "must": [
        { "match": { "field1":   "terms1"}},              <------query context
      ],
      "filter": [ 
        { "terms":  { "someId": [3242, 12343, 1234] }},   <-------inside filter block every query clause will act as filter (filter context)
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,为了使用术语查询作为过滤器,您需要按照以下步骤操作:

  1. 创建一个布尔查询说 boolQuery
  2. 创建一个terms查询sat termsQuery
  3. 添加termsQuery到 的过滤器boolQuery
  4. 设置boolQuery为查询。

这转化为以下内容:

{
  "query": {
    "bool": {
      "filter": [
        {
          "terms": {
            "field1": ["terms1", "term2", "terms3"]
          }
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 不用担心。人们来这里是为了清除疑虑和帮助。 (2认同)