Elasticsearch 可以在不指定字段的情况下按日期范围过滤吗?
Can Elasticsearch filter by a date range without specifying a field?
我有多个日期字段,我想要一个日期范围查询来过滤任何。
例如,我的索引中可能有书籍,每本书可能有一个出版日期、版本日期、打印日期,以及作者的出生日期。
映射很简单(使用 Elasticsearch.net Nest 生成):
"printDate" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
},
我查看了 range queries and 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
,但这将使我维护所有日期字段的列表,这似乎不够优雅。
有没有办法在所有日期字段中搜索日期范围?
试试这个查询:
{
"query": {
"query_string": {
"default_field": "*Date",
"query": "[2010-01-01T00:00:00 TO 2015-01-01T00:00:00]"
}
}
}
我有多个日期字段,我想要一个日期范围查询来过滤任何。
例如,我的索引中可能有书籍,每本书可能有一个出版日期、版本日期、打印日期,以及作者的出生日期。
映射很简单(使用 Elasticsearch.net Nest 生成):
"printDate" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
},
我查看了 range queries and 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
,但这将使我维护所有日期字段的列表,这似乎不够优雅。
有没有办法在所有日期字段中搜索日期范围?
试试这个查询:
{
"query": {
"query_string": {
"default_field": "*Date",
"query": "[2010-01-01T00:00:00 TO 2015-01-01T00:00:00]"
}
}
}