如何解决ElasticSearch-按子聚合排序
我对Elasticsearch非常陌生,我正在尝试对子聚合进行排序。那就是我的结果应该首先基于子聚合排序。我已经尝试了很多方法来启用这种排序,但是它不起作用。有人可以帮忙吗?
{
"aggs": {
"distinct_part": {
"terms": {
"field": "part","size": 1000
}
},"aggs": {
"distinct_manufacturer": {
"terms": {
"field": "manufacturer","size": 1000
}
}
}
}
我正在尝试对制造商进行排序,我应该对整个结果进行排序?有人可以指出我如何实现这一目标吗?
解决方法
我尝试对您的查询进行本地测试。如果我对您的问题很了解,我会进行一些小的更正。我在索引“ subsorting”中摄取了以下数据:
"part": "car","manufacturer": "brandA"
"part": "car","manufacturer": "brandB"
"part": "car","manufacturer": "brandC"
"part": "motor","manufacturer": "brandA"
"part": "motor","manufacturer": "brandB"
"part": "motor","manufacturer": "brandC"
注意:零件和制造商都映射为文本。
GET subsorting/_search
{
"size": 0,"aggs": {
"distinct_part": {
"terms": {
"field": "part.keyword","size": 1000
},"aggs": {
"distinct_manufacturer": {
"terms": {
"field": "manufacturer.keyword","order": {
"_key": "asc"
},"size": 1000
}
}
}
}
}
}
如果两个字段“ part”和“ manufacturer”都映射为关键字,请从查询中删除“ .keywords”。
如果按升序排序,则上述查询的响应如下:
"aggregations" : {
"distinct_part" : {
"doc_count_error_upper_bound" : 0,"sum_other_doc_count" : 0,"buckets" : [
{
"key" : "motor","doc_count" : 4,"distinct_manufacturer" : {
"doc_count_error_upper_bound" : 0,"buckets" : [
{
"key" : "brandA","doc_count" : 2
},{
"key" : "brandB","doc_count" : 1
},{
"key" : "brandC","doc_count" : 1
}
]
}
},{
"key" : "car","doc_count" : 3,"doc_count" : 1
}
]
}
}
]
}
}
如果您需要结果按降序排列,则以下是响应"_key": "desc"
:
"aggregations" : {
"distinct_part" : {
"doc_count_error_upper_bound" : 0,"buckets" : [
{
"key" : "brandC",{
"key" : "brandA","doc_count" : 2
}
]
}
},"doc_count" : 1
}
]
}
}
]
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。