Сортировка Elasticsearch по строке, не возвращающей ожидаемые результаты
При сортировке в поле строки с несколькими словами Elasticsearch разбивает строковое значение и использует значение min или max как значение сортировки. I.E.: При сортировке по полю со значением "Глаз тигра" в порядке возрастания значение сортировки: "Глаз", а при сортировке в порядке убывания значение равно "Тигр".
Допустим, что у меня есть "Глаз тигра" и "Колесо смерти" в качестве записей в моем индексе, когда я делаю восходящую сортировку в этом поле, я бы ожидал, что "Глаз тигра" будет первым, поскольку "E" предшествует "W", но то, что я вижу при сортировке на этом поле, "Колесо смерти" идет первым, так как "D" - это минимальное значение этого термина, а "E" - минимальное значение "Глаз тигра".
Кто-нибудь знает, как отключить это поведение и просто разрешить регулярную сортировку в этом поле строки?
Ответы
Ответ 1
Как упоминалось в mconlin, если вы хотите сортировать по неанализируемому полю doc, вам нужно указать "index": "not_analyzed" для сортировки, как описано. Но если вы хотите, чтобы это поле было открыто для поиска, этот пост от sloan показывает отличный пример. Использование multi-field для сохранения двух разных сопоставлений для поля очень часто встречается в Elasticsearch.
Надеюсь, что это поможет, дайте мне знать, если я могу предложить больше объяснений.
Ответ 2
Если вы хотите, чтобы сортировка была нечувствительной к регистру "index": "not_analyzed"
не работает, поэтому я создал собственный анализатор сортировки.
индекс-settings.yml
index :
analysis :
analyzer :
sort :
type : custom
tokenizer : keyword
filter : [lowercase]
Mapping:
...
"articleName": {
"type": "string",
"analyzer": "standard",
"fields": {
"sort": {
"type": "string",
"analyzer": "sort"
}
}
}
...