У меня есть поле created_at
в моей базе данных Elastic Search, и я пытаюсь извлечь данные и отсортировать их по этому полю. Поле было сохранено со свойством сопоставления с форматом даты с ключом fielddata
, установленным на true, но я все равно получаю сообщение об ошибке:
Текстовые поля не оптимизированы для операций, требующих данных поля для каждого документа, таких как агрегирование и сортировка, поэтому эти операции по умолчанию отключены. Вместо этого используйте поле ключевого слова. В качестве альтернативы установите fielddata = true для [created_at], чтобы загрузить данные поля путем отмены инвертирования инвертированного индекса. Обратите внимание, что для этого может потребоваться значительный объем памяти.
Одно из предложений состоит в том, что я могу добавить слово keyword
в свое поле для поиска, но это, кажется, говорит мне, что:
created_at не определен
Я использую Javascript, и я знаю, что вы не можете просто добавить символ (точка), поэтому я завернул его, но он все еще не работает. elastic.find
- это просто функция, которую я написал для извлечения данных, если я удалю массив sort
, она сработает.
const results = await elastic.find('my table', {
query: {
range: {
created_at: {
gte: moment(from).format('YYYY-MM-DD HH:MM:SS')
}
}
},
sort: [{
[created_at.keyword]: 'asc' // seems to be undefined
}]
})
Почему я не могу получить доступ к created_at.keyword
?