Как сопоставить разные экземпляры одного и того же запроса в Elasticsearch? - PullRequest
0 голосов
/ 06 октября 2018

Пример 1. Мой термин запроса - «abcd».

Моя структура запроса выглядит следующим образом:

    query: {
       query_string: {
          query: "abc",
          fields: ["field1", "field2", "field3"]
       }
    },
    size: 50,
    "highlight": {
    "fields": {
        "field1": {},
        "field2": {},
        "field3": {}
    }

Соответствует следующим экземплярам:

abc abcs abc_def_ghi

Но это не соответствует def_abc или def_abc_ghi.В основном это случаи, когда abc находится в середине строки.

Пример 2: в том же примере выше, если мой запрос abc_def

Он не соответствует abc_def_ghi, хотя abc_def присутствует.

Я попробовал prefix_phrase, и он решает сценарий 2, но пропускает проблемы примера 1.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018
  • Как следует из названия, phase_prefix похоже на автозаполнение бедного человека, оно ищет поля, которые начинаются с данной фразы в вашем случае abc, abcs, abc_def_ghi.поскольку ваше поле не начинается с abc, в случае def_abc, def_abc_ghi оно не будет работать с префиксом фразы.
  • Попробуйте использовать символьные фильтры конкретно Шаблон Замените фильтр символов , чтобы заменить _ на (пробел) из вашего поля, в то время как анализирует ваше поле.отметьте ответ .таким образом, ваш токен будет содержать [def,abc,ghi] вместо одного токена, например [def_abc_ghi].затем вы можете найти его, используя cross_field в анализируемом поле, которое должно удовлетворить все ваши упомянутые случаи.
0 голосов
/ 06 октября 2018

для этих случаев вы должны использовать подстановочный знак в запросе или регулярное выражение

если вы используете термин запрос, вы можете использовать подстановочный термин запрос или вместо этого регулярное выражение .

...