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

时间:2015-08-31 19:05:59

标签: javascript elasticsearch

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

"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
}

任何人都可以帮助查看阵列上是否有此日期范围功能?这种搜索还有其他选择吗?感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

试试这个:

from lib.pygal.*

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

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

答案 1 :(得分:0)

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"
                    }
                  }
                }]
              }
            }
        }
    }
}