Вернуть результаты поиска Elasticsearch в порядке расположения?
В настоящее время я использую функцию подсветки, которую предлагает Flexiblesearch в своем запросе. Однако, одна вещь, которую я не совсем понимаю, это то, как упорядочены результаты. Я бы предпочел, чтобы они вернулись в order that they appear
в пункте вместо важности / оценки. Это так, я могу объединить их с ...
в том же порядке, что и в оригинальном документе (аналогично результатам Google). Тем не менее, они в настоящее время возвращаются в некотором взвешенном порядке на основе лучшего соответствия?
Есть ли способ сделать это, не выполняя дополнительную постобработку на поле после просмотра результатов выделения?
Я вижу, что есть "order" : "score"
вариант для выделения, но нет никаких других документированных вариантов для изменения порядка возврата. (И кроме того, я не понимаю разницу между порядком по умолчанию и порядком начисления очков).
Вот фрагмент выделенной части моего запроса.
"highlight": {
"fields": {
"synopsis": {
"fragment_size": 150,
"number_of_fragments": 4
}
}
}
1 ответ
Итак, немного поиграв, я обнаружил, что fast-vector-highlighter
отсортирует фрагменты по порядку их появления в исходном документе. Чтобы включить это, мне нужно было добавить "term_vector" : "with_positions_offsets"
к моему синопсису сопоставления полей.
{
"properties" : {
"synopsis" : {
"type" : "string",
"term_vector": "with_positions_offsets"
}
}
}
а затем используйте мой основной запрос так:
{
"query": {
"match": {
"synopsis": "foo"
}
},
"highlight": {
"fields": {
"synopsis": {
"type": "fvh",
"fragment_size": 150,
"number_of_fragments": 4
}
}
}
}
ПРИМЕЧАНИЕ. Использование "order" : "score"
приведет к тому, что порядок будет следовать схеме оценки, которая не обязательно соответствует порядку смещения начальной позиции. Я полагаю, что точный код для этого компаратора можно найти здесь, который, кажется, основывает его на усилении фрагмента, а затем на его начальном смещении.