Это происходит из-за использования фильтра токенов snowball
, который определяет слова, пожалуйста, обратитесь к официальному снежному кому c для получения дополнительной информации.
Я создаю тот же анализатор с вашими настройками, чтобы увидеть сгенерированные токены для вашего текста, поскольку в конце поиск происходит, когда токен индекса совпадает с токенами поискового запроса.
ES предоставляет хороший API REST, и вы можете легко воспроизвести проблему:
Создайте индекс с вашими настройками
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "standard",
"filter": [
"lowercase",
"snowball",
"stop"
]
}
}
}
},
"mappings": {
"properties": {
"name": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
после создания индекса вы можете использовать API анализа , чтобы увидеть сгенерированные токены для вашего текста.
POST http://{{hostname}}:{{port}}/{{index-name}}/_analyze
{
"analyzer": "my_analyzer",
"text": "Sales inquiries generated"
}
{
"tokens": [
{
"token": "sale",
"start_offset": 0,
"end_offset": 5,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "inquiri",
"start_offset": 6,
"end_offset": 15,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "generat",
"start_offset": 16,
"end_offset": 25,
"type": "<ALPHANUM>",
"position": 2
}
]
}
Вы можете видеть, что все токены совпадают, что соответствует вашему поисковому запросу, следовательно, вы получаете результат для других условий поиска, что означает, что при запросе вместо сырого вы используете ключевую часть вашего текста поле
Обновление: Как упоминалось в комментариях, пожалуйста, предоставьте дополнительную информацию ie окончательный поиск JSON и вы отображаете в JSON, чтобы найти root c ause и следите за моим блогом о том, как реализовать частичное автозаполнение в ES.