ES Multiple必须查询

时间:2017-08-21 14:21:09

标签: elasticsearch

我想使用多必须查询但我得到以下错误。 重复键“必须”语法错误。 结果应该是芬达和可乐。 我怎样才能得到这个数据?

必须如下结果: 1:可口可乐 2:芬达

  {
    "query": {
      "bool": {
        "must": [
             {
                "match": {
                  "productName":"Coca Cola"
                }
              },
              {
                "match": {
                  "productCode": "Coke"
                }
              },
              {
                "match": {
                  "created_date": "2018-06-10"
                }
              }
        ],
        "must": [
             {
                "match": {
                  "productName":"Fanta"
                }
              },
              {
                "match": {
                  "productCode": "Coke"
                }
              },
              {
                "match": {
                  "created_date": "2018-06-05"
                }
              }
        ]
      }
    }
  }

在mysql中:

SELECT * FROM products WHERE(name ='Coca Cola'和code ='Coke'...)或(name ='Fanta'...)

1 个答案:

答案 0 :(得分:3)

您需要将must(即AND)包装在should(即OR)中,如下所示:

{
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "match": {
                  "productName": "Coca Cola"
                }
              },
              {
                "match": {
                  "productCode": "Coke"
                }
              },
              {
                "match": {
                  "created_date": "2018-06-10"
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "match": {
                  "productName": "Fanta"
                }
              },
              {
                "match": {
                  "productCode": "Coke"
                }
              },
              {
                "match": {
                  "created_date": "2018-06-05"
                }
              }
            ]
          }
        }
      ]
    }
  }
}