# Сортировка collapse query по inner\_hits doc count

**URL:** https://discuss.elastic.co/t/collapse-query-inner-hits-doc-count/83124
**Category:** Вопросы на русском языке
**Created:** [April 20, 2017, 10:08pm UTC](https://discuss.elastic.co/t/collapse-query-inner-hits-doc-count/83124 "2017-04-20T22:08:00Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![griand](https://avatars.discourse-cdn.com/v4/letter/g/a4c791/32.png) [@griand](https://discuss.elastic.co/u/griand)
#### Post date: [April 20, 2017, 10:08pm UTC](https://discuss.elastic.co/t/collapse-query-inner-hits-doc-count/83124/1 "2017-04-20T22:08:00Z")

</div>

Добрый день.

На данный момент для группировки документов по значению поля использую запрос с terms агрегированием и далее top\_hits subaggregation для извлечения документа с top score значением. Такой запрос по известным причинам не позволяет выполнять пагинацию и поэтому приходится доставать все документы за раз даже если нужно отобразить только первые 10 документов.

В версии 5.3.0 появился [Field Collapsing Search API](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/search-request-collapse.html), который делает то же что и 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 в принципе или продолжать пользоваться аггрегированием?

---

<div class="post-metadata">

### Author: ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)
#### Post date: [April 21, 2017, 12:20pm UTC](https://discuss.elastic.co/t/collapse-query-inner-hits-doc-count/83124/2 "2017-04-21T12:20:51Z")

</div>

Поиск производится в несколько фаз. К тому времени, когда у нас есть информация о `inner_hits.hits_by_key.hits`, группы уже должны быть отсортированы. Другими словами, во время фазы сортировки информация по которой вы хотите сортировать еще не доступна - она будет получена только в следующей фазе. Поэтому то, что вы хотите, реализовать на данный момент невозможно.

---

<div class="post-metadata">

### Author: ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)
#### Post date: [May 19, 2017, 12:33pm UTC](https://discuss.elastic.co/t/collapse-query-inner-hits-doc-count/83124/3 "2017-05-19T12:33:48Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
