Добрый день.
На данный момент для группировки документов по значению поля использую запрос с terms агрегированием и далее top_hits subaggregation для извлечения документа с top score значением. Такой запрос по известным причинам не позволяет выполнять пагинацию и поэтому приходится доставать все документы за раз даже если нужно отобразить только первые 10 документов.
В версии 5.3.0 появился Field Collapsing Search API, который делает то же что и terms aggs + top_hits subaggs и плюс к этому позволяет реализовать пагинацию, но встал вопрос с сортировкой по размеру inner_hits doc count. Мне нужно чтобы результаты запроса были отсортированы по убыванию по количеству inner_hits документов.
Весь вопрос сводится к тому как получить доступ к значению поля inner_hits.my_hits_name.hits.total, например при пересчете score значения.
GET /index_name/my_type/_search
{
"query": {
"function_score": {
"query": {
"match_all": {}
},
"script_score": {
"script": {
"lang": "painless",
"inline": "inner_hits.hits_by_key.hits"
}
}
}
},
"collapse": {
"field": "key",
"inner_hits": {
"name": "hits_by_key",
"size": 1,
"sort": [
{
"price": "asc"
}
]
}
}
}
Тот же самый вопрос возникает если пытаться делать сортировку через script based sorting:
GET /index_name/my_type/_search
{
"collapse": {
"field": "key",
"inner_hits": {
"name": "hits_by_key",
"size": 1,
"sort": [
{
"price": "asc"
}
]
}
},
"sort": {
"_script": {
"type": "number",
"script": {
"lang": "painless",
"inline": "inner_hits.hits_by_key.hits"
},
"order": "desc"
}
}
}
Возможно ли сортировать по inner_hits doc count в принципе или продолжать пользоваться аггрегированием?