Elasticsearch: как узнать, по какому полю отсортированы результаты?

Есть ли в Elasticsearch способ проверить, по какому полю отсортированы результаты? Я хочу что-то вроде внутренних хитов для предложения сортировки.

Представьте, что ваши документы имеют такую ​​форму:

{"numerals" : [  // nested
    {"key": "point", "value": 30},
    {"key": "points", "value": 200},
    {"key": "score", "value": 20},
    {"key": "scores", "value": 40}
  ]
}

и вы сортируете результаты по:

{"numerals.value": {
  "nested_path": "numerals",
  "nested_filter": {
    "match": {
      "numerals.key": "score"}}}}

Теперь я понятия не имею, как узнать поле, по которому на самом деле сортируются результаты: это, вероятно, scores в этом документе, но, возможно, score в других? Есть 2 проблемы - 1. Вы не можете использовать ни внутренние хиты, ни выделение для вложенных полей. и - 2. Даже если вы можете, это не решит проблему, если есть несколько совпадающих кандидатов.


person akai    schedule 11.06.2017    source источник
comment
Что, если вместо этого вы используете запрос term во вложенном фильтре?   -  person Val    schedule 14.06.2017
comment
@Val хорошо, я хочу использовать match.   -  person akai    schedule 14.06.2017
comment
Достаточно справедливо, по какой причине у вас есть score и scores? Почему бы просто не использовать тот же термин?   -  person Val    schedule 14.06.2017
comment
@Val Показанный документ является всего лишь скомпрометированным примером. Настоящие намного сложнее. Я даже не могу ожидать, что произойдет с keys.   -  person akai    schedule 14.06.2017
comment
Достаточно честно, я просто пытаюсь сначала понять, есть ли простой способ ;-)   -  person Val    schedule 14.06.2017
comment
Каково отображение поля numerals.key?   -  person Val    schedule 19.06.2017
comment
@Вал Это text   -  person akai    schedule 20.06.2017


Ответы (1)


Вопрос про сортировку по полям, которые находятся внутри вложенных объектов.

Вот что документирует https://www.elastic.co/guide/en/elasticsearch/guide/current/nested-sorting.html и https://www.elastic.co/guide/en/elasticsearch/reference/current/search.-request-sort.html#_nested_sorting_example говорит :

Elasticsearch сначала ограничит вложенные документы запросом «nested_filter», а затем отсортирует так же, как и для многозначных полей: точно так же, как если бы в качестве внутренних объектов были только отфильтрованные вложенные документы, то есть как если бы были только корневой документ с многозначным полем, которое содержит ровно все значения, принадлежащие отфильтрованным вложенным объектам
(в вашем примере останется только одно значение: 20). Если вы хотите быть уверены в порядке сортировки, вставьте параметр «режим»: «мин», «макс», «сумма», «среднее» или «медиана».

Если вы не укажете параметр «режим» в соответствии с соответствующей проблемой, значение будет выбрано для «по возрастанию», а максимальное значение будет выбрано для «убывающего» порядка:

По умолчанию при сортировке по многозначному полю из значений поля будет выбрано самое низкое или самое высокое значение в зависимости от порядка сортировки.

person Karsten R.    schedule 19.06.2017
comment
Интересно, но как мне узнать, какие numerals.value выбраны в качестве кандидатов на минимальное и максимальное значение? - person akai; 20.06.2017
comment
Я обновил ответ: поскольку ваш вложенный_фильтр соответствует только вложенному документу, оставшееся значение равно 20. Вложенный_фильтр используется из elasticsearch независимо от вашего (основного) запроса. - person Karsten R.; 21.06.2017