数组字段的弹性搜索日期范围过滤器

Elastic Search Date Range filter for Array fields

本文关键字:日期 范围 过滤器 搜索 字段 数组      更新时间:2023-09-26

我正在寻找如何从数组过滤日期范围。示例数据如下

"airings":[{
    "startTime":"2015-08-29T10:00:00+0000",
    "endTime":"2015-08-30T21:30:00+0000"
  },{
    "startTime":"2015-08-29T10:00:00+0000",
    "endTime":"2015-08-31T21:30:00+0000"
  }]

需要一个日期范围过滤器,搜索给定startTime和endTime之间的广播。我有下面的查询,但是语法不正确。

{
  "query": {
    "bool": {
      "must": [
        {
          "range": 
            {
                "airings.startTime": {
                  "gte": "2015-08-30T12:00:00.000Z"
                },
                "airings.endTime": {
                  "lte": "2015-08-30T01:00:00.000Z"
                }
            }
        }
     ]
    }
  },
  "from": 0,
  "size": 128
}

有没有人可以帮忙看看这个日期范围功能是否在数组上可用?这类搜索还有其他选择吗?谢谢你的帮助。

试试这个:

{
   "filter": {
      "bool": {
         "must": [
            {
               "range": {
                  "airings.startTime": {
                     "gte": "2015-08-28T12:00:00.000Z"
                  }
               }
            },
            {
               "range": {
                  "airings.endTime": {
                     "lte": "2015-08-31T01:00:00.000Z"
                  }
               }
            }
         ]
      }
   }
}

下面是我用来测试它的一些代码:

http://sense.qbox.io/gist/8f9e747b3e3d8824ee9933b6ceb42b0f98532d28

POST /flights/airings
{
    "startTime":"2015-08-29T10:00:00+0000",
    "endTime":"2015-08-30T21:30:00+0000"
}
POST /flights/airings
{
    "startTime":"2015-08-29T10:00:00+0000",
    "endTime":"2015-08-31T21:30:00+0000"
}
GET /flights/airings/_search
{
   "query" : {
        "filtered" : {
            "query" : { "match_all" : {}},
            "filter" : {
              "bool" : {
                "must" : [{
                  "range": {
                    "startTime": {
                      "lte": "2015-08-30T12:00:00.000Z"
                    }
                  }
                },
                {
                  "range": {
                    "endTime": {
                      "gte": "2015-08-30T01:00:00.000Z"
                    }
                  }
                }]
              }
            }
        }
    }
}