ElasticSearch查询大于日期

uklbhaso  于 2022-11-22  发布在  ElasticSearch
关注(0)|答案(2)|浏览(172)

我创建了一个索引,它为某个对象保存两个日期(D1,D2),然后我想查询这个时刻是否在D1和D2之间,所以我查询:

startdate <= "2019-08-22T03:55:47.165Z" AND endate>= "2019-08-22T03:55:47.165Z"

它成功地返回了我想要的数据,所以我尝试在Dev工具中再次执行相同的操作:

GET i_want_get_date/_search
{
  "query":{
    "query_string":{
      "query":"startdate<= \"2019-08-22T03:55:47.165Z\" AND enddate>= \"2019-08-22T03:55:47.165Z\""
    }
  }
}

问题是:

它无法搜索任何返回结果,查询无法使用此方法比较日期

有什么建议吗?谢谢!

谢谢瓦尔回答这个问题,我使用了一个非常模糊的查询来实现同样的功能,我稍微修改了一下查询语法,使其正常工作:

GET i_want_get_date/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "startdate":{
              "lte":"2019-08-22T03:55:47.165Z"
            }
          }
        },
        {
          "range": {
            "enddate":{
              "gte":"2019-08-22T03:55:47.165Z"
            }
          }
        }
      ]
    }
  }
}
o7jaxewo

o7jaxewo1#

我建议改用两个range queries

GET i_want_get_date/_search
{
  "query": {
    "bool": {
      "filter": [
        {
          "range": {
            "lte": {
              "startdate": "2019-08-22T03:55:47.165Z"
            }
          }
        },
        {
          "range": {
            "gte": {
              "enddate": "2019-08-22T03:55:47.165Z"
            }
          }
        }
      ]
    }
  }
}
zz2j4svz

zz2j4svz2#

您的答案中存在语法错误,弹性字段应位于gtelte之前

{
   "range": {
         "**startdate**": {
              "**lte**": "2019-08-22T03:55:47.165Z"
          }
      }
}

相关问题