Можем ли мы использовать несколько терминов в фильтрах elasticsearch?

Можно ли использовать несколько терминов для определенных полей в логическом фильтре?

query": {
      "filtered": {
         "filter": {
            "bool": {
               "must": [
                  {
                     "terms": {
                        "events": [
                           "abc",
                           "def",
                           "ghi",
                           "jkl"
                        ]
                     },
                     "terms" : {
                        "users" : [
                          "user_1",
                          "user_2",
                          "user_3"
                        ]
                     }
                  }
               ]
            }
         }
      }
   }

Фильтр первых условий работает нормально, но я не могу использовать вторые условия. Пожалуйста, исправьте, если я делаю что-то не так с приведенным выше запросом.


person Mithun Shreevatsa    schedule 05.11.2015    source источник


Ответы (1)


Ты был почти у цели, ты забыл одну скобку. Вот правильный запрос:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "terms": {
                "events": [
                  "abc",
                  "def",
                  "ghi",
                  "jkl"
                ]
              }
            },
            {
              "terms": {
                "users": [
                  "user_1",
                  "user_2",
                  "user_3"
                ]
              }
            }
          ]
        }
      }
    }
  }
}

Это оценит оба условия:

  1. Ваше событие должно быть одним из abc/def/ghi/jkl
  2. Пользователь должен быть либо user_1/user_2/user_3

По сути, каждый термин запрос/фильтр должен быть заключен в собственные фигурные скобки, и они должны быть братьями и сестрами.

person Evaldas Buinauskas    schedule 05.11.2015