Как отфильтровать данные по двум предложениям в Elasticsearch? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь отфильтровать набор данных на основе двух условий.Я хочу, чтобы мои результаты возвращали запись, если она удовлетворяет либо условию 1 (где запись содержит A и B), либо условию 2 (где запись содержит A и C) с включенными подстановочными знаками.

Например, если у меня есть эта таблица (а Z - просто символ случайного заполнения):

TABLE 1
AZZZ ZBZ
ZZZZ ZAZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ
ZZZZ ZZZ
ZZCZ ZZZ

Я бы хотел, чтобы мой возвращаемый результат был таким:

TABLE 1 (Returned)
AZZZ ZBZ
ZZAZ ZZB
CZZZ ZZA
AZZZ ZCZ

Я пробовал коды по этим направлениям, но, похоже, не могу получить желаемых результатов:

{  
   "query":{  
      "query_string":{  
         "analyze_wildcard":true,
         "default filter":"*",
         "query":"A B"
      }
   }
}

Есть мысли?

1 Ответ

1 голос
/ 16 апреля 2019
  1. Подстановочные запросы позволяют сопоставить части строки в не проанализированных (keyword) полях, например:

    POST my_index/_search
    {
        "query": {
            "wildcard" : { "my_field" : "*A*" }
        }
    }
    
  2. Bool запросы - ваш друг для объединения вещей. Я думаю, что было бы легче реструктурировать это следующим образом, который должен быть эквивалентен:

    POST my_index/_search
    {
      "query": {
        "bool" : {
          "must" : {
            "wildcard" : { "my_field" : "*A*" }
          },
          "should" : [
            { "wildcard" : { "my_field" : "*B*" } },
            { "wildcard" : { "my_field" : "*C*" } }
          ],
          "minimum_should_match" : 1
        }
      }
    }
    

Но это не будет очень эффективным. Немного трудно абстрагироваться, какие у вас есть данные и чего вы хотите достичь, но, возможно, есть лучший способ добиться этого? Эта проблема очень похожа на особенности реляционных баз данных, тогда как у поисковой системы гораздо больше возможностей.

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