我正在尝试使用以下语法在 Elasticsearch 上创建范围过滤器:
{
"size": 100,
"filter": {
"and": {
"filters": [
{
"range": {
"listingDate": {
"gt": "15/07/2017 16:08:53"
}
}
}
]
}
}
}
数据格式为:
"listingDate": "07/07/2015 09:30:00",
但是,无论过滤器属性如何, Elasticsearch 都会返回相同的错误结果。我尝试添加以下格式:
"format": "dd/MM/yyyy HH:mm:ss"
但我得到同样的错误结果。
一个完整的例子是:
{
"size": 100,
"sort": [
{
"listingDate": {
"order": "asc"
}
}
],
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "Event"
}
},
{
"range": {
"listingDate": {
"gte": "15/07/2015 16:08:53"
}
}
},
{
"range": {
"endDate": {
"gte": "15/07/2015 16:08:53"
}
}
}
]
}
},
"filter": {
"and": {
"filters": [
{
"terms": {
"departments": [
"2393"
]
}
}
]
}
}
}
最佳答案
在JSON文档中,日期表示为字符串。 Elasticsearch使用一组预配置的格式来识别这些字符串并将其解析为一个长值,该长值表示UTC以来的毫秒数。您的日期字段可能未在预配置的ES日期formats集中列出。
默认情况下,格式化的日期将使用date字段上指定的格式进行解析,但是可以通过将format参数传递给范围查询来覆盖它。
{
"range" : {
"listingDate" : {
"gte": "07/07/2015 09:30:00",
"format": "dd/MM/yyyy HH:mm:ss"
}
}
}
关于date - Elasticsearch 中的日期过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31449502/