Как фильтровать данные по двум предложениям в Elasticsearch?

#json #elasticsearch #filtering #kibana #non-relational-database

#json #elasticsearch #фильтрация #kibana #нереляционная база данных

Вопрос:

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

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

Комментарии:

1. Это сделало свое дело. Большое вам спасибо. У вас хорошая интуиция, проблема моделируется вокруг реляционной базы данных, потому что мы смоделировали весь этот проект на реляционной базе данных, но через два месяца столкнулись с нереляционной базой данных, и никто (включая меня) не имеет никакого опыта работы с этими базами данных. Я все еще пытаюсь перевести наш план анализа / sql-поиск в нереляционную базу данных / Elasticsearch, и у меня возникают некоторые проблемы с этим. Будут ли руководства по elastic.co веб-сайты лучше всего подходят для изучения elasticsearch, или есть другие хорошие инструменты для изучения?

2. Документы хорошие и довольно обширные. Если вам нужна сокращенная версия, есть также официальные тренинги , особенно Engineering I и II для вашего варианта использования. Отказ от ответственности: я работаю в Elastic и иногда провожу тренинги.

3. Спасибо, я просмотрю документы.