Elasticsearch聚合未应用于过滤器

时间:2017-10-16 11:22:16

标签: elasticsearch elasticsearch-plugin

这是我的查询。我想要获得所有内部产品" men_fashion"和" men_shoes"类别(类别用作术语/标签)。然后我想查询整个结果集并搜索那些有" men boots yellow"在他们中间。

以下查询完全正常,但现在我没有得到正确的聚合结果。它给了我所有品牌,因为我只对品牌感兴趣。

{
    "size": 15,
    "from": 0,
    "query": {
        "query_string": {
            "query": "men boots yellow"
        }
    },
    "filter": {
        "bool": {
            "must": [{
                "match": {
                    "active": 1
                }
            }, {
                "match": {
                    "category": "men_fashion"
                }
            }, {
                "match": {
                    "category": "men_shoes"
                }
            }]
        }
    },
    "aggs": {
        "brands": {
            "terms": {
                "size": 100,
                "field": "brand"
            }
        }
    }
}

我认为这可能是由于我已应用的过滤器,但如果这有点复杂,我可以使用一个简单的查询来实现这一点而不需要过滤器。

1 个答案:

答案 0 :(得分:1)

您使用的是post filter而不是普通的查询过滤器,请尝试这样:

{
  "size": 15,
  "from": 0,
  "query": {
    "bool": {
      "must": {
        "query_string": {
          "query": "men boots yellow"
        }
      },
      "filter": [
        {
          "match": {
            "active": 1
          }
        },
        {
          "match": {
            "category": "men_fashion"
          }
        },
        {
          "match": {
            "category": "men_shoes"
          }
        }
      ]
    }
  },
  "aggs": {
    "brands": {
      "terms": {
        "size": 100,
        "field": "brand"
      }
    }
  }
}