是否可以更改elasticsearch中范围聚合的结果排序?我在elasticsearch中有一个键控范围查询,并希望根据键而不是doc_count进行排序。
我的文件是:
POST /docs/doc/1
{
"price": 12
}
POST /docs/doc/2
{
"price": 8
}
POST /docs/doc/3
{
"price": 15
}
汇总查询:
POST /docs/_search
{
"size": 0,
"aggs": {
"price_ranges": {
"range": {
"field": "price",
"keyed": true,
"ranges": [
{
"key": "all",
"from": 0
},
{
"key": "to10",
"from": 0,
"to": 10
},
{
"key": "from11",
"from": 11
}
]
}
}
}
}
此查询的结果为:
"aggregations": {
"price_ranges": {
"buckets": {
"to10": {
"from": 0,
"from_as_string": "0.0",
"to": 10,
"to_as_string": "10.0",
"doc_count": 2
},
"all": {
"from": 0,
"from_as_string": "0.0",
"doc_count": 4
},
"from11": {
"from": 11,
"from_as_string": "11.0",
"doc_count": 2
}
}
}
}
我想根据键对结果进行排序,而不是根据范围值。根据elasticsearch文档,无法指定排序顺序,在指定排序顺序时,我得到以下异常:
"reason": "Unknown key for a START_ARRAY in [price_ranges]: [order]."
有关如何应对此问题的任何想法?谢谢!
答案 0 :(得分:1)
由于键似乎是根据DatePickerDialogFragment
值的升序值排序的,因此您可以“作弊”一点并将from
桶的from
值修改为 - 1,然后all
广告资源首先显示,然后all
,最后显示to10
:
from11
答案 1 :(得分:0)
一般情况下,您可以使用bucket_sort aggregation。然后,您可以按_key
,_count
或子聚合(即按每个存储桶计算的指标)进行排序。
鉴于你只有三个固定存储桶,我只是在客户端进行排序。