带过滤器的 Elasticsearch bool 查询

Elasticsearch bool query with filter

我正在尝试编写一个包含 2 个部分的 Elasticsearch bool 查询。 我想要 "must" 的两个条件和 "should" 的两个条件。问题是我只想获得 "should" 的分数。我尝试了 "filter" 但没有成功。

更具体地说,我的查询在这里:

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "attr1": "on"
          }
        },
        {
          "match": {
            "category": "7eb84c804a8c824fd608e05f78d42f10"
          }
        }
      ],
      "should": [
        {
          "term": {
            "attr2": "on"
          }
        },
        {
          "term": {
            "attr3": "on"
          }
        }
      ],
      "minimum_should_match": "10%"
    }
  }
}

更新 这是失败的查询,我想找出错误!:

  {
  "query": {
    "bool": {
      "filter": [
        {
          "term": {
            "attr1": "on"
          }
        },
        {
          "term": {
            "category": "7eb84c804a8c824fd608e05f78d42f10"
          }
        }
      ],
      "should": [
        {
          "term": {
            "attr2": "on"
          }
        },
        {
          "term": {
            "attr3": "on"
          }
        }
      ],
      "minimum_should_match": "10%"
    }
  }
}

如何按顺序重写这个查询: 1) 获取 attr1 和 category 准确的所有行 2) 然后用 should

查询这些结果

有什么想法吗?

您似乎没有使用 Elasticsearch 2.x。

对于 Elasticsearch 1.x 使用 FilteredQuery:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-filtered-query.html

{
  "filtered": {
    "query": {
      "bool": {
        "should": [
          {
            "term": {
              "attr2": "on"
            }
          },
          {
            "term": {
              "attr3": "on"
            }
          }
        ]
      }
    },
    "filter": {
      "bool": {
        "must": [
          {
            "match": {
              "attr1": "on"
            }
          },
          {
            "match": {
              "category": "7eb84c804a8c824fd608e05f78d42f10"
            }
          }
        ]
      }
    }
  }
}