Elasticseatch точное совпадение или частичное совпадение - PullRequest
0 голосов
/ 01 октября 2018

Моя идея - создать точное / частичное совпадение.Итак, если в любом из полей найдено точное совпадение, верните только его.Если нет точного совпадения, вернуть все частичные совпадения.Для иллюстрации приведу пример по электронной почте.Я использую стандартный анализатор и отображаю электронные письма как текст .

. Для примера, у нас есть следующие проиндексированные электронные письма:

  1. one @gmail.com
  2. two@gmail.com
  3. three@gmail.com
  4. 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".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...