Глядя на свой комментарий, вы можете решить проблему двумя способами.
Решение 1: Обновление сопоставления, чтобы ваш запрос теперь работал как ожидалось
PUT my_index/_mapping/_doc
{
"properties": {
"itemNumeric": {
"type": "text",
"fielddata": true
}
}
}
Решение 2: Проверьте сопоставлениеваше поле itemNumeric
в случае, если ваше отображение было создано динамически, ваше поле itemNumeric было бы многопольным.
"itemNumeric": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
В этом случае вы можете применить логику сортировки к полю itemNumeric.keyword
.
"sort":[{"itemNumeric.keyword":"desc"}]
В эластичном поиске, когда у вас есть текстовые данные, всегда рекомендуется создавать два поля для него.Один тип text
, чтобы вы могли применять полнотекстовые запросы, а другой тип keyword
, чтобы вы могли использовать, если реализовать сортировку или какие-либо операции агрегирования.
Решение 1 не рекомендуется, поскольку в официальной документации ES ниже указана причина.
Fielddata
по умолчанию отключено в текстовых полях.Установите fielddata=true
на [your_field_name], чтобы загрузить полевые данные в память, инвертировав инвертированный индекс.Note that this can however use significant memory
.
Я бы посоветовал прочитать о мультиполе и полевых данных , чтобы у вас было больше ясности в том, что происходит.