Elasticsearch - 从聚合中排除过滤器

时间:2017-03-07 18:01:42

标签: elasticsearch solr aggregation facet

我查询以下内容:

{
  "query": {
    "bool": {
      "filter": {
        "terms": {
          "agent_id": [
            "58becc297513311ad81577eb"
          ]
        }
      }
    }
  },
  "aggs": {
    "agent_id": {
      "terms": {
        "field": "agent_id"
      }
    }
  }
}

我希望从过滤器中排除聚合。 In solr there is an option to tag a filter and use this tag to exclude this filter from the fact query

我如何在Elasticsearch中做同样的事情。

2 个答案:

答案 0 :(得分:2)

解决此问题的一种方法是使用here所述的post_filter

这可能是性能问题,因此如果它不适合您的SLA,则可以使用global存储桶替代方法并描述here

答案 1 :(得分:2)

您可以使用post_filter进行弹性搜索。发布过滤器从聚合中排除过滤器的范围,非常适合构建电子商务搜索,以便对过滤器进行深入聚合计数

您可以构建如下所示的查询

{
    "aggs": {
        "agent_id": {
            "terms": {
                "field": "agent_id",
                "size": 10
            }
        }
    },
    "post_filter": {
        "bool": {
            "terms": {
                "agent_id": [
                    "58becc297513311ad81577eb"
                ]
            }
        }
    }
}

由于