Nested sort inside a top hits inside a reverse nested doesn't work #13420
程序员文章站
2022-03-02 10:57:18
...
https://github.com/elastic/elasticsearch/issues/13420
Hello,
I'm facing something that looks like a bug. I have a simple document model : my documents are items, and inside these items there are categories.
I want to get a list of categories with a certain type, and for each of these categories, a list of top items belonging to this category, sorted on the category rank. So I'm doing a top hits inside reverse nested
Mapping example :
POST /bugth
{
"mappings":
{
"item" : {
"properties" : {
"id" : { "type" : "integer" },
"categories" : {
"type" : "nested",
"properties" : {
"id" : { "type" : "integer" },
"type" : { "type" : "integer" },
"rank" : { "type" : "integer" }
}
}
}
}
}
}
Some data to test :
PUT /bugth/item/3
{
"id": 3,
"categories": [{
"id": 1,
"type": 1,
"rank": 15
}, {
"id": 2,
"type": 1,
"rank": 1
}]
}
PUT /bugth/item/2
{
"id": 2,
"categories": [{
"id": 1,
"type": 1,
"rank": 10
}, {
"id": 2,
"type": 1,
"rank": 5
},
{
"id": 3,
"type": 2,
"rank": 20
}]
}
PUT /bugth/item/1
{
"id": 1,
"categories": {
"id": 1,
"type": 1,
"rank": 0
}
}
Finally the search query :
POST /bugth/item/_search
{
"size": 0,
"query": {
"filtered": {
"filter": {
"match_all": {}
}
}
},
"aggs": {
"categories": {
"nested": {
"path": "categories"
},
"aggs": {
"filteredcategories": {
"filter": {
"bool": {
"must": {
"term": { "categories.type": 1}
}
}
},
"aggs": {
"top_categories": {
"terms": {
"field": "categories.id"
},
"aggs": {
"top_items": {
"reverse_nested": {
},
"aggs": {
"top_items_per_categories": {
"top_hits": {
"sort": [
{
"categories.rank": {
"order": "asc",
"mode": "max"
}
}
]
}
}
}
}
}
}
}
}
}
}
}
}
}
上一篇: CSUOJ 1503: 点到圆弧的距离 [叉积+三角形外心]【计算几何】
下一篇: 平行四边形边数