ElasticSearch - Фразовый запрос с префиксом не дает результатов - PullRequest
0 голосов
/ 14 марта 2019

У меня есть поле, которое анализируется с использованием токенайзера для пробелов, а также фильтров нижнего и нижнего регистра. Я пытаюсь запустить запрос, который содержит как префикс, так и подстановочный знак. Мы заменяем отечественную поисковую систему, использующую чистый 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.

Что мне нужно изменить, чтобы получить результаты второго запроса? Спасибо.

1 Ответ

0 голосов
/ 16 марта 2019

Рассматривали ли вы использовать префикс или подстановочный знак термины уровня запроса?Конечно, вам понадобится мультиполе типа keyword для вашего поля name (которое используется по умолчанию для строковых полей), но тогда вам не нужно беспокоиться о max_expansions.

Ваш запрос может выглядеть следующим образом:

{
  "query": {
    "prefix": {
      "name.keyword": "smith joh"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...