我试图在搜索查询Elasticsearch中通过top_hits参数对数据进行排序,但不知何故,它并没有影响任何东西。有人可以帮助我吗?
所以我试着使用sort,就像有些人说的那样:
{
"size" : 0,
"from" : 0,
"aggs": {
"by_filter": {
"filter": {
"bool": {
"must": [
{
"range": {
"published_at": {
"gte": "2019-08-01 00:00:00",
"lte": "2023-10-30 23:59:59"
}
}
},
{
"match": {
"status": "published"
}
}
]
}
},
"aggs": {
"by_created": {
"terms": {
"field": "created_by.id",
"size": 10
},
"aggs" : {
"count_data": {
"terms": {
"field": "created_by.id"
}
},
"hits": {
"top_hits": {
"sort": [ <---- the sort query that I found
{
"created_by.id": {
"order": "desc"
}
}
],
"_source":["created_by.id"],
"size": 1
}
}
}
}
}
}
}
}
字符串
但结果并没有改变
"aggregations": {
"by_filter": {
"doc_count": 21,
"by_created": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 3,
"buckets": [
{
"key": 34,
"doc_count": 3,
"hits": {
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "re_article",
"_id": "53822",
"_score": null,
"_source": {
"created_by": {
"id": 34
}
},
"sort": [ <--- I think this is the result of the sort
34
]
}
]
}
},
"count_data": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 34,
"doc_count": 3
}
]
}
},
{
"key": 52,
"doc_count": 3,
"hits": {
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "re_article",
"_id": "338610",
"_score": null,
"_source": {
"created_by": {
"id": 52
}
},
"sort": [
52
]
}
]
}
},
"count_data": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 52,
"doc_count": 3
}
]
}
}
]
}
}
}
型
我所期望的是桶先显示键52,然后是34,像这样:
"aggregations": {
"by_filter": {
"doc_count": 21,
"by_created": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 3,
"buckets": [
{
"key": 52,
"doc_count": 3,
"hits": {
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "re_article",
"_id": "338610",
"_score": null,
"_source": {
"created_by": {
"id": 52
}
}
}
]
}
},
"count_data": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 52,
"doc_count": 3
}
]
}
},
{
"key": 34,
"doc_count": 3,
"hits": {
"hits": {
"total": {
"value": 3,
"relation": "eq"
},
"max_score": null,
"hits": [
{
"_index": "re_article",
"_id": "53822",
"_score": null,
"_source": {
"created_by": {
"id": 34
}
}
}
]
}
},
"count_data": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": 34,
"doc_count": 3
}
]
}
}
]
}
}
}
型
我想我选错了一个例子,因为在top_hits结果中有一个新的“sort”字段,但不是我真正想要的
1条答案
按热度按时间qvk1mo1f1#
你很接近了,你只需要将
"order"
移动到你真正想要排序的聚合中,并稍微改变一下语法。如果你想对by_created
聚合中的键排序,你需要将"order"
添加到那个聚合中,top_hits
中的"order"
将对hits
排序:字符串
你可以在
terms
聚合文档中找到更多的选项。如果你需要对其他聚合进行排序,你可能会发现bucket_sort
aggregation很有用。