Вы определяете свое поле name
как поле text
, которое по умолчанию использует стандартный анализатор и преобразует токены в нижний регистр. Вы можете проверить это, используя анализ API из ES.
Пример токенов для анализатора ключевых слов
URL: - http: // {{hostname}}: {{ port}} / {{index}} / _ анализ
{
"text": "John Smith",
"analyzer" : "keyword"
}
Вывод вышеуказанного API
{
"tokens": [
{
"token": "John Smith",
"start_offset": 0,
"end_offset": 10,
"type": "word",
"position": 0
}
]
}
Обратите внимание, что он не ломает text
и сохраняет его в том виде, как объяснено в официальный ES do c.
Токены со стандартным анализатором
{
"text": "Smith John",
"analyzer" : "standard"
}
Вывод вышеуказанного API:
{
"tokens": [
{
"token": "john",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "smith",
"start_offset": 5,
"end_offset": 10,
"type": "<ALPHANUM>",
"position": 1
}
]
}
Теперь, когда префиксный запрос не анализируется, отправьте его как есть. ES, поэтому Smith
уведомление с заглавной буквы S
будет отправлено в ES для сопоставления токенов, теперь с обновленным сопоставлением, только документы, начинающиеся с Smith
, будут иметь этот префикс, и только они будут появляться в результатах поиска.
Отображение
{
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "keyword"
}
}
}
}
Поисковый запрос
{
"query": {
"prefix": {
"name": {
"value": "Smith"
}
}
}
}
РЕДАКТИРОВАТЬ: : - ** Обновлен параметр на основе комментариев OP и на основе вышеуказанных параметров и поиска запрос, он получает только результаты, начинающиеся с Smith
, как показано ниже:
{
"took": 811,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 5,
"relation": "eq"
},
"max_score": 1.0,
"hits": [
{
"_index": "59977669",
"_type": "_doc",
"_id": "6",
"_score": 1.0,
"_source": {
"name": "Smith John"
}
},
{
"_index": "59977669",
"_type": "_doc",
"_id": "7",
"_score": 1.0,
"_source": {
"name": "Smithb John"
}
},
{
"_index": "59977669",
"_type": "_doc",
"_id": "8",
"_score": 1.0,
"_source": {
"name": "Smithc John"
}
},
{
"_index": "59977669",
"_type": "_doc",
"_id": "9",
"_score": 1.0,
"_source": {
"name": "Smithd John"
}
},
{
"_index": "59977669",
"_type": "_doc",
"_id": "10",
"_score": 1.0,
"_source": {
"name": "Smithe John"
}
}
]
}
}
Примечание: Этот блог охватывает различные способы реализации автозаполнения с компромиссами.