使用嵌套的Should运算符构造ElasticSearch查询

时间:2017-05-15 10:17:01

标签: elasticsearch nosql

我正在努力创建一个简单的ElasticSearch查询。 这是我想在简单的SQL中实现的

SELECT * FROM products WHERE (title='LG' OR title='Nokia') AND (brand='Samsung' OR title='iPhone')

这是我的Elasticsearch查询:

  "query": {
    "bool": {
      "must": [
        {
          "bool": {
            "should": [
              {
                "match": {
                  "product-name": "Samsung"
                }
              },
              {
                "match": {
                  "product-name": "Nokia"
                }
              }
            ],
            "minimum_should_match": 1

          }
        }
      ]
    }
  }    

这将返回Psuedo SQL WHERE (title='LG' OR title='Nokia')

的第一行

但我如何构建AND (brand='Samsung' OR title='iPhone')

1 个答案:

答案 0 :(得分:2)

以下查询应该完成工作。您需要在must子句中添加一个块。

{
  "query": {
"bool": {
  "must": [
    {
      "bool": {
        "should": [
          {
            "match": {
              "product-name": "LG"
            }
          },
          {
            "match": {
              "product-name": "Nokia"
            }
          }
        ],
        "minimum_should_match": 1

      }
    } ,
     {
      "bool": {
        "should": [
          {
            "match": {
              "brand": "Samsung"
            }
          },
          {
            "match": {
              "title": "iPhone"
            }
          }
        ],
        "minimum_should_match": 1

         }
       }
     ]
   }
  }    
}

希望这有帮助