弹性搜索 2.3 查询问题
Elastic search 2.3 query issue
我正在查询 python、
中的数据
当我只是进行匹配并排序时,它工作正常。
res = es.search( body={"size" : 100,
"query": {"match": {"SensorId": "f0038c53272a"}},
"sort":{"StartDateTime": "desc"}})
现在当我引入范围时,它开始报错
res = es.search( body={"size" : 100,
"query": {"match": {"SensorId": "f0038c53272a"}},
"sort":{"StartDateTime": "desc"},
"range":{"StartDateTime":{"gte":"now-50d/d","lt": "now/d"}}})
它抛出的错误是
elasticsearch.exceptions.RequestError:
TransportError(400, 'search_phase_execution_exception',
'No mapping found for [StartDateTime] in order to sort on')
Elasticsearch 版本为 2.3。任何线索都会有所帮助。提前致谢。
该错误通常是由于该字段不在映射中引起的,即没有包含该字段的文档。检查索引是否为空或字段名称是否有错别字
此外,过滤器的语法不正确。参见 filter context or post filter。这是前者的查询:
{
"query": {
"bool": {
"must": {"match": {"SensorId": "f0038c53272a"}},
"filter": {"range": {"StartDateTime": {"gte": "now-50d/d", "lt": "now/d"}}}
}
},
"sort":{"StartDateTime": "desc"}
}
如果 SensorId
上的检查是完全匹配并且实际上不需要任何评分,您可能需要进一步优化查询,同时在过滤器中移动匹配项。
问题也可能出在日期范围格式上。尝试给定 "gte": "now-50d/d", "lt": "now/d" 可能不起作用。在我们的例子中,列中的时间采用 POSIX 格式,因此类似于 'long' 数字。在这种情况下,您可以尝试将日期范围指定为:
{"range": {"StartDateTime": {"gte": "1531108114", "lt": "1531280914"}}}
我正在查询 python、
中的数据当我只是进行匹配并排序时,它工作正常。
res = es.search( body={"size" : 100,
"query": {"match": {"SensorId": "f0038c53272a"}},
"sort":{"StartDateTime": "desc"}})
现在当我引入范围时,它开始报错
res = es.search( body={"size" : 100,
"query": {"match": {"SensorId": "f0038c53272a"}},
"sort":{"StartDateTime": "desc"},
"range":{"StartDateTime":{"gte":"now-50d/d","lt": "now/d"}}})
它抛出的错误是
elasticsearch.exceptions.RequestError:
TransportError(400, 'search_phase_execution_exception',
'No mapping found for [StartDateTime] in order to sort on')
Elasticsearch 版本为 2.3。任何线索都会有所帮助。提前致谢。
该错误通常是由于该字段不在映射中引起的,即没有包含该字段的文档。检查索引是否为空或字段名称是否有错别字
此外,过滤器的语法不正确。参见 filter context or post filter。这是前者的查询:
{
"query": {
"bool": {
"must": {"match": {"SensorId": "f0038c53272a"}},
"filter": {"range": {"StartDateTime": {"gte": "now-50d/d", "lt": "now/d"}}}
}
},
"sort":{"StartDateTime": "desc"}
}
如果 SensorId
上的检查是完全匹配并且实际上不需要任何评分,您可能需要进一步优化查询,同时在过滤器中移动匹配项。
问题也可能出在日期范围格式上。尝试给定 "gte": "now-50d/d", "lt": "now/d" 可能不起作用。在我们的例子中,列中的时间采用 POSIX 格式,因此类似于 'long' 数字。在这种情况下,您可以尝试将日期范围指定为:
{"range": {"StartDateTime": {"gte": "1531108114", "lt": "1531280914"}}}