Вы определяете поле name
как поле text
, которое по умолчанию использует standard анализатор и преобразует токены в нижний регистр. Вы можете проверить это с помощью analyze API ЕС.
Пример токенов для анализатора ключевых слов
URL: - http://{{hostname}}:{{port}}/{{index}}/_analyze
{
"text": "John Smith",
"analyzer" : "keyword"
}
Вывод вышеуказанного API
{
"tokens": [
{
"token": "John Smith",
"start_offset": 0,
"end_offset": 10,
"type": "word",
"position": 0
}
]
}
Обратите внимание, что он не нарушает text
и не сохраняет его, как описано в официальный документ ES.
Токены со стандартным анализатором
{
"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"
}
}
}
}
EDIT: :- ** Обновлен параметр на основе комментариев 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"
}
}
]
}
}
person
user156327
schedule
30.01.2020
mapping
индекса для устранения этих проблем. - person user156327   schedule 30.01.2020name.keyword
вместоname
. Поскольку вы не определили конкретное определение, это может помочь. Если вы хотите пойти дальше с автозаполнением, использование запросаprefix
— это только начало, вы можете сделать гораздо больше. - person Val   schedule 30.01.2020name.keyword
помогло. Можете ли вы объяснить, почему или дать ссылку, чтобы узнать больше об этом? Спасибо! - person Nishith Shah   schedule 30.01.2020