弹性搜索查询:(A或B)和(C或D)

时间:2017-10-10 10:05:16

标签: elasticsearch logical-operators

我有一个弹性搜索索引,其中的列是Country和Expertise。我需要编写一个查询,我可以获取其中的记录 国家是(美国或英国) 和 专长是(植物学或物理学)

如何撰写此查询?

1 个答案:

答案 0 :(得分:2)

您可以使用boolterms查询执行此操作,如下所示:

{
    "query": {
        "bool": {
            "must": [
               {
                   "terms": {
                      "Country": [
                         "USA",
                         "UK"
                      ]
                   }
               },
               {
                   "terms": {
                      "Expertise": [
                         "Botany",
                         "Physics"
                      ]
                   }
               }
            ]
        }
    }
}

另一方面,您只能使用bool查询来执行此操作:

{
    "query": {
        "bool": {
            "must": [
               {
                   "bool": {
                       "should": [
                          {
                              "term": {
                                 "Country": {
                                    "value": "USA"
                                 }
                              }
                          },
                          {
                              "term": {
                                 "Country": {
                                    "value": "UK"
                                 }
                              }
                          }
                       ]
                   }
               },
               {
                   "bool": {
                       "should": [
                          {
                              "term": {
                                 "Expertise": {
                                    "value": "Botany"
                                 }
                              }
                          },
                          {
                              "term": {
                                 "Expertise": {
                                    "value": "Physics"
                                 }
                              }
                          }
                       ]
                   }
               }
            ]
        }
    }
}

但是,在询问任何其他问题之前,请先查看documentation。也许,你可能会发现一个较短的查询。