non嵌套

mgdq6dx1  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(2)|浏览(318)

刚接触elasticsearch,正在开发一个我不愿改变的遗留模型。我有一个日期字段,如果它的值是 null (我想是因为es的处理方式 0000-00-00 ). 我希望能够查询具有特定日期或字段不存在的数据。以下是我所拥有的:

{
    "size": 10000,
    "query": {
        "bool": {
            "must": [
                {
                    "term": {
                        "AccountID": "xxxx"
                    }
                },
                {
                    "term": {
                        "LocationID": "xxxx"
                    }
                },
                {
                    "should": [
                        {
                            "range": {
                                "CloseDate": {
                                    "gte": "2020-11-01",
                                    "lte": "2020-12-02"
                                }
                            }
                        },
                        {
                            "bool": {
                                "must_not": {
                                    "exists": {
                                        "field": "CloseDate"
                                    }
                                }
                            }
                        }
                    ]
                }
            ]
        }
    }
}

我得到和错误的 [should] query malformed, no start_object after query name 当你尝试这个的时候。是否有其他的语法或是什么东西真的不正常?

b1zrtrql

b1zrtrql1#

错误清楚地表明您的查询格式不正确。你错过了一个 ] 支架。尝试此查询:

{
  "size": 10000,
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "AccountID": "xxxx"
          }
        },
        {
          "term": {
            "LocationID": "xxxx"
          }
        }
      ],                                   <-- note this
      "should": [
        {
          "range": {
            "CloseDate": {
              "gte": "2020-11-01",
              "lte": "2020-12-02"
            }
          }
        },
        {
          "bool": {
            "must_not": {
              "exists": {
                "field": "CloseDate"
              }
            }
          }
        }
      ]
    }
  }
}
kninwzqo

kninwzqo2#

must 子句中可以有多个查询 [] . 请注意 should 也是 bool 而不是查询本身。所以它应该在里面 bool .

{
  "size": 10000,
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "AccountID": "xxxx"
          }
        },
        {
          "term": {
            "LocationID": "xxxx"
          }
        },
        {
          "bool": {            <------------- Note this
            "should": [
              {
                "range": {
                  "CloseDate": {
                    "gte": "2020-11-01",
                    "lte": "2020-12-02"
                  }
                }
              },
              {
                "bool": {
                  "must_not": {
                    "exists": {
                      "field": "CloseDate"
                    }
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}

相关问题