我们可以在弹性搜索过滤器中使用多个术语条件吗

Mit*_*tsa 1 filter elasticsearch elasticsearch-plugin

是否可以对布尔过滤器中的特定字段使用多个术语条件?

query": {
      "filtered": {
         "filter": {
            "bool": {
               "must": [
                  {
                     "terms": {
                        "events": [
                           "abc",
                           "def",
                           "ghi",
                           "jkl"
                        ]
                     },
                     "terms" : {
                        "users" : [
                          "user_1",
                          "user_2",
                          "user_3"
                        ]
                     }
                  }
               ]
            }
         }
      }
   }
Run Code Online (Sandbox Code Playgroud)

第一个术语过滤器工作正常,但我无法使用第二个术语,如果我对上述查询做错了什么,请更正。

Eva*_*kas 6

你快到了,你忘记了一个支架。这是正确的查询:

{
  "query": {
    "filtered": {
      "filter": {
        "bool": {
          "must": [
            {
              "terms": {
                "events": [
                  "abc",
                  "def",
                  "ghi",
                  "jkl"
                ]
              }
            },
            {
              "terms": {
                "users": [
                  "user_1",
                  "user_2",
                  "user_3"
                ]
              }
            }
          ]
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这将评估两个条件:

  1. 您的活动必须是 abc/def/ghi/jkl 之一
  2. 用户必须是 user_1/user_2/user_3

基本上每个术语查询/过滤器都需要包含在它自己的大括号中,并且它们需要是兄弟姐妹。