Elasticsearch:汇总查询结果

时间:2014-08-28 17:22:34

标签: elasticsearch aggregation elasticsearch-aggregation

我有一个包含产品的弹性搜索索引,我可以查询不同的搜索字词。每个产品都包含一个字段shop_id来引用它所属的商店。现在我尝试显示包含我的查询产品的所有商店的列表。 (按商店过滤) 据我读过类似的问题,我必须使用聚合。最后我构建了这个查询:

curl -XGET 'http://localhost:9200/searchindex/_search?search_type=count&pretty=true' -d '{
  "query" : {
      "match" : {
          "_all" : "playstation"
      }
  },
  "aggregations": {
    "shops_count": {
      "terms": {
        "field": "shop_id"
      }
    }
  }
}'

这应该搜索playstation并根据shop_id汇总结果。可悲的是,它只会返回

  

数据太大,数据会大于[8534150348]的限制   字节]。

我也尝试过只返回2个结果的查询。 该指数包含超过90,000,000种产品。

1 个答案:

答案 0 :(得分:1)

我建议这是过滤器聚合的工作。

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-bucket-filter-aggregation.html

注意:我不知道您的索引中的产品映射,因此如果下面的过滤器不起作用,请尝试http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-filters.html

中的其他过滤器
{
    "aggs" : {
        "in_stock_playstation" : {
            "filter" : { "term" : { "change_me_to_field_for_product" : "playstation" } } },
            "aggs" : {
                "shop_count" : { "terms" : { "field" : "shop_id" } }
            }
        }
    }
}