1

我有多个日期字段,我希望有一个日期范围查询来过滤它们中的任何一个。

例如,我的索引中可能有书籍,每本书可能有出版日期出版日期印刷日期作者出生日期

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

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

我查看了范围查询查询字符串范围- 两者都需要明确的字段名称并且似乎不支持通配符。
例如,这没有找到任何东西,但如果我使用真实的字段名称而不是"*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,但这将使我维护所有日期字段的列表,这似乎不雅。

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

4

1 回答 1

2

试试这个查询:

{
  "query": {
    "query_string": {
      "default_field": "*Date", 
      "query": "[2010-01-01T00:00:00 TO 2015-01-01T00:00:00]"
    }
  }
}
于 2016-07-13T11:35:59.360 回答