3

我有一个包含产品的弹性搜索索引,我可以查询不同的搜索词。每个产品都包含一个字段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 种产品。

4

1 回答 1

2

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

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" } }
            }
        }
    }
}
于 2014-08-29T01:20:25.763 回答