Моя идея - создать точное / частичное совпадение.Итак, если в любом из полей найдено точное совпадение, верните только его.Если нет точного совпадения, вернуть все частичные совпадения.Для иллюстрации приведу пример по электронной почте.Я использую стандартный анализатор и отображаю электронные письма как текст .
. Для примера, у нас есть следующие проиндексированные электронные письма:
- one @gmail.com
- two@gmail.com
- three@gmail.com
- four@hotmail.com
Если строка запроса равна "one@gmail.com "only one@gmail.com должен быть возвращен.
Если строка запроса" gmail.com ", должны быть возвращены все электронные письма gmail.
В настоящее время у меня есть запросы:
{"query": {
"multi_match":{
"query":"one@gmail.com",
"fields":["email", "other_fileds"],
"type":"phrase"
}
Этот найдет точные совпадения при использовании стандартного анализатора и сопоставления текста.
{"query": {
"query_string":{
"query":"gmail.com",
}
Этот найдет все частичные совпадения.
Мне нужнокаким-то образом объединить их с ИЛИ.
До сих пор я следовал предложению из комментария и делал следующее: во-первых, я ищу, используя совпадение фраз
{"query":
{"query_string":
{
"query":"one@gmail.com",
"type":"phrase"
}
}
}
Если нет обращений,Я делаю второй поиск:
{"query":
{"query_string":
{
"query":"one@gmail.com",
}
}
}
В большинстве случаев это работает хорошо.Но это терпит неудачу в следующем случае, когда поисковый запрос содержит много данных из разных полей.Например, "one@gmail.com Alex 095111111".