Elasticsearch可以按日期范围过滤而不指定字段吗?

时间:2016-07-13 11:06:30

标签: elasticsearch elasticsearch-query

我有多个日期字段,我想要一个日期范围查询来过滤任何

例如,我的索引中可能有图书,每本图书可能有发布日期版本日期打印日期,以及作者的出生日期

映射很简单(使用Elasticsearch.net Nest生成):

"printDate" : {
    "type" : "date",
    "format" : "strict_date_optional_time||epoch_millis"
},

我查看了range queriesquery string ranges - 两者都明确需要该字段的名称,并且似乎不支持通配符。
例如,这没有找到任何内容,但如果我使用真实字段名称而不是"*Date"则有效:

"filter": [
  {
    "range": {
      "*Date": {
        "gte": "2010-01-01T00:00:00",
        "lte": "2015-01-01T00:00:00"
      }
    }
  }
]

我还尝试将[2010-01-01 TO 2015-01-01]放在查询字符串中,但日期没有正确解析 - 它还会发现201001作为其他字符串的一部分(看似其他日期) 另一种选择是列出"should"子句下的每个字段并指定"minimum_should_match":1,但这将使我维护所有日期字段的列表,这似乎不够优雅。

有没有办法在所有日期字段中搜索日期范围?

1 个答案:

答案 0 :(得分:1)

尝试此查询:

{
  "query": {
    "query_string": {
      "default_field": "*Date", 
      "query": "[2010-01-01T00:00:00 TO 2015-01-01T00:00:00]"
    }
  }
}