这是我正在寻找的一个例子。假设我有一些购买记录。我想得到价格> 1的记录。 50美元,按价格降序排列。我想将这些有序记录限制为100,然后按邮政编码对它们进行分组。
最终结果应该包含每个邮编的点击次数,其中这些计数的总和将达到100个记录。
ES v2.1.1
答案 0 :(得分:1)
您需要使用Search API获取100个结果,然后进行后处理以执行聚合(因为无法使用ES API直接完成热门命中的聚合)。
对于步骤1-3,您需要:
$ curl -XGET 'http://localhost:9200/my_index/_search?pretty' -d '{"query":
{"filtered" : {"filter" : { "range": { "price": { "gt": 50 }}}}},
"size" : 100,
"sort": { "price": { "order": "desc" }}
}'
答案 1 :(得分:1)
你是什么意思“按邮政编码分组”:
如果1:
{
"size": 100,
"query": {
"filtered": {
"filter": {
"range": {
"price": {
"gt": 50
}
}
}
}
},
"sort": {
"price": "desc"
},
"aggs": {
"by_zip_code": {
"terms": {
"field": "zip_code"
}
}
}
}
如果为2,您可以使用top hits aggregations。但是,按价格排序是不可能的(我们怎么能这样做?),默认情况下,Elasticsearch使用_count
(检查intrinsic sorts)。如果排序不是很重要,以下内容将起作用:
{
"size": 0,
"query": {
"filtered": {
"filter": {
"range": {
"price": {
"gt": 50
}
}
}
}
},
"sort": {
"price": "desc"
},
"aggs": {
"by_zip_code": {
"terms": {
"field": "zip_code",
"size": 100
},
"aggs": {
"hits": {
"top_hits": {}
}
}
}
}
}