我有多个日期字段,我想要一个日期范围查询来过滤任何。
例如,我的索引中可能有图书,每本图书可能有发布日期,版本日期,打印日期,以及作者的出生日期。
映射很简单(使用Elasticsearch.net Nest生成):
"printDate" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
},
我查看了range queries和query 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]
放在查询字符串中,但日期没有正确解析 - 它还会发现2010
或01
作为其他字符串的一部分(看似其他日期)
另一种选择是列出"should"
子句下的每个字段并指定"minimum_should_match":1
,但这将使我维护所有日期字段的列表,这似乎不够优雅。
有没有办法在所有日期字段中搜索日期范围?
答案 0 :(得分:1)
尝试此查询:
{
"query": {
"query_string": {
"default_field": "*Date",
"query": "[2010-01-01T00:00:00 TO 2015-01-01T00:00:00]"
}
}
}