У меня есть поле, которое анализируется с использованием токенайзера для пробелов, а также фильтров нижнего и нижнего регистра. Я пытаюсь запустить запрос, который содержит как префикс, так и подстановочный знак. Мы заменяем отечественную поисковую систему, использующую чистый Lucene, на ElasticSearch, и аналогичные запросы работали с синтаксисом Lucene, но не работают в ElasticSearch.
Например, этот запрос найдет все документы, в которых есть «smith john» в поле «name».
{
"query": {
"simple_query_string": {
"query": "\"smith john\"",
"fields": ["name"],
"default_operator": "AND"
}
}
}
Однако я также хочу найти «smith johnny», «smith john a» и т. Д. В нашем коде Lucene мы просто добавили префиксный оператор для этого поиска, но он выдает 0 результатов.
{
"query": {
"simple_query_string": {
"query": "\"smith joh*\"",
"fields": ["name"],
"default_operator": "AND"
}
}
}
Если я опускаю кавычки, я получаю результаты, но это включает документы с обоими именами, такими как "Смит Барри" и "Уилсон Джон", проиндексированными в одном и том же документе. Мне нужны только такие имена, как «Смит Джон» и «Смит Джонни» и т. Д.
Я также пробовал вариации query_string с похожими результатами.
Я знаю, что могу использовать «match_phrase_prefix» для поиска «smith joh», но это имеет свои собственные ограничения, такие как ограничение использования подстановочных знаков и необходимость знать или угадывать значение для max_expansions.
Что мне нужно изменить, чтобы получить результаты второго запроса? Спасибо.