复杂 bool 查询中的 Elastic Search 错误

Elastic Search error in complex bool query

我正在尝试进行 elasticsearch 查询,我需要在 elasticsearch table 中搜索时间范围。我有开始时间和结束时间的记录。从 UI 我给出了开始时间和结束时间,这是我需要搜索文件的时间 windows。假设记录中开始时间和结束时间的时间 window 小于用户输入的时间 window,我创建了以下查询:

    {
    "_source":["filename","starttime","endtime"],
    "sort":[{
        "starttime":{"order":"asc"}
    }],
    "query":{
        "bool":{
            "should":{
                "bool":{
                    "must":[
                        "range":{
                            "starttime":{
                                "lte":1489602610000
                            }
                        },
                        "range":{
                            "endtime":{
                                "gte":1489602610000,
                            }
                        }
                    ]
                }
            },
            "should":{
                "bool":{
                    "must":[
                        "range":{
                            "starttime":{
                                "gte":1489602610000
                            }
                        },
                        "range":{
                            "endtime":{
                                "lte":1489689000000
                            }
                        }
                    ]
                }
            },
            "should":{
                "bool":{
                    "must":[
                        "range":{
                            "starttime":{
                                "lte":1489689000000
                            }
                        },
                        "range":{
                            "endtime":{
                                "gte":1489689000000
                            }
                        }
                    ]
                }
            }
            }
        }
}

我遇到错误

"Unexpected character (':' (code 58)): was expecting comma to separate Array entries\n at [Source: org.elasticsearch.transport.netty4.ByteBufStreamInput@29263f09; line: 11, column: 33]"

您的查询存在几个问题:

  • 一个悬空逗号
  • 多个bool/should个条款
  • range 查询未正确包含在大括号内

您可以在下面找到正确的查询:

{
  "_source": [
    "filename",
    "starttime",
    "endtime"
  ],
  "sort": [
    {
      "starttime": {
        "order": "asc"
      }
    }
  ],
  "query": {
    "bool": {
      "should": [
        {
          "bool": {
            "must": [
              {
                "range": {
                  "starttime": {
                    "lte": 1489602610000
                  }
                }
              },
              {
                "range": {
                  "endtime": {
                    "gte": 1489602610000
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "range": {
                  "starttime": {
                    "gte": 1489602610000
                  }
                }
              },
              {
                "range": {
                  "endtime": {
                    "lte": 1489689000000
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "must": [
              {
                "range": {
                  "starttime": {
                    "lte": 1489689000000
                  }
                }
              },
              {
                "range": {
                  "endtime": {
                    "gte": 1489689000000
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}