ElasticSearch:如何组合嵌套的“AND”不等于

时间:2016-02-24 05:45:10

标签: search elasticsearch

我希望构建查询以匹配嵌套且不相等的搜索。

这是我的elasticSearch查询:

{
    "from":0,"size":1000,
    "query":{
        "nested" : {
            "path" : "data",
            "query" : {
                "match" : {
                    "data.city" : "california"
                }
            }
        },
        "filter":{
            "not":{
                "filter":{
                    "term":{
                        "_id":"01921asda01201"
                    }
                }
            }
        }
    }
}

但是我得到了错误,我写错了什么?感谢

3 个答案:

答案 0 :(得分:0)

您需要使用filtered query

GET _search
{
  "query": {
    "filtered": {
      "query": {
        "nested": {
          "path" : "data",
            "query" : {
                "match" : {
                    "data.city" : "california"
                }
            }
        }
      },
      "filter": {
        "bool": {
          "must_not": [
            {
              "term": {
                "_id": "01921asda01201"
              }
            }
          ]
        }
      }
    }
  }
}

答案 1 :(得分:0)

您也可以function使用define('WP_HOME','http:example.com'); define('WP_SITEURL','http:example.com'); bool Filter条款。

must

答案 2 :(得分:0)

您应该使用bool query,并将两个子句分别放在mustmust_not部分。

如果您不关心data.city字段的评分(从您的示例中看不清楚),您可能希望使用filter部分代替must部分{1}}部分。

{
  "from": 0,
  "size": 1000,
  "query": {
    "bool": {
      "filter": [
        {
          "nested": {
            "path": "data",
            "query": {
              "match": {
                "data.city": "california"
              }
            }
          }
        }
      ],
      "must_not": [
        {
          "term": {
            "_id": "01921asda01201"
          }
        }
      ]
    }
  }
}