Я пытаюсь реализовать функцию автозаполнения в числовом поле (фактический тип в ES - long
).
Я использую виджет автозаполнения jQuery UI на стороне клиента, имея source
функцию, отправляющую запрос в Elasticsearch с префиксом, чтобы получить количество (скажем, 5) вариантов автозаполнения.
Я использую следующий запрос:
{
"size": 0,
"query": {
"prefix": {
"myField": "<term>"
}
},
"aggs": {
"myAggregation": {
"terms": {
"field": "myField",
"size": 5
}
}
}
}
Таким образом, если myField
имеет разные значения: [1, 15, 151, 21, 22]
, а term
равно 1
, то я ожидал бы получить от ES корзины с ключами [1, 15, 151]
.
Проблема в том, что это не работает с числовыми полями. В приведенном выше примере я получаю одну корзину с ключом 1
, а если term
равно 15
, я получаю одну корзину с ключом 15
, т.е. он возвращает только точные совпадения. Напротив, он отлично работает с string
типизированными полями.
Я предполагаю, что мне нужно какое-то специальное сопоставление для myField
, но я бы предпочел, чтобы сопоставление было как можно более общим, при этом автозаполнение работало бы с минимальными изменениями сопоставления (просто обратите внимание - индекс, который я запрашиваю, может быть общим one, внешний по отношению к моему приложению, поэтому я смогу изменить отображение типа / поля в нем только в том случае, если новое отображение является чем-то общим и стандартным).
Какие у меня здесь варианты?