【发布时间】:2016-07-13 19:35:59
【问题描述】:
我有多个日期字段,我希望有一个日期范围查询来按任何个字段进行过滤。
例如,我的索引中可能有书籍,每本书可能有一个出版日期、出版日期、印刷日期,以及作者的出生日期。
映射很简单(使用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,但这将使我维护所有日期字段的列表,这似乎不雅。
有没有办法在所有日期字段中搜索日期范围?
【问题讨论】:
-
我会选择支持通配符字段名称的
query_string。 -
此外,例如,ES 不会神奇地选择仅属于
date类型的字段。你需要帮助它一点。通过对日期字段使用相似的名称,然后对字段名称使用通配符等。 -
@AndreiStefan - 我尝试了查询字符串和通配符,但它不解析日期,而是寻找字符串。
-
好的。您可以分享您尝试过但失败的查询吗?另外,请提供查询中使用的那些字段的映射。
-
@AndreiStefan - 当然,就在这里。当然,这可能不受支持。如果
*Date可以工作,它会解决我的问题 - 只是所有这些字段都以Date结尾。
标签: elasticsearch elasticsearch-query