我有一个包含产品的弹性搜索索引,我可以查询不同的搜索字词。每个产品都包含一个字段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种产品。
答案 0 :(得分:1)
我建议这是过滤器聚合的工作。
注意:我不知道您的索引中的产品映射,因此如果下面的过滤器不起作用,请尝试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" } }
}
}
}
}