Elasticsearch:v7.2
应用:Laravel v5.7
我正在尝试查询我的文档是否属于某个时间范围
这是我的索引的mav_time_aired
字段映射:
现在,我想过滤或提取特定时间范围内的文档(我想以mav_time_aired
到06:00:00
至09:00:00
范围内的18:00:00
值来检索文档 OR 22:00:00
到$temp =
[
"bool" => [
"should" => [
[
"range" => [
"mav_time_aired" => [
"gte" => "06:00:00",
"lte" => "09:00:00",
'format' => "HH:mm:ss",
]
]
],
[
"range" => [
"mav_time_aired" => [
"gte" => "18:00:00",
"lte" => "22:00:00",
'format' => "HH:mm:ss",
]
]
]
]
]
];
,所以我有这种查询:
format
根据文档,使用No result found
属性,我必须能够从字面上将文档数据格式化为所需的格式。
现在使用给定的查询,我希望我应该能够获取所需的输出,但是不幸的是,查询的结果是:
Empty
或packet_write_wait: Connection to **.**.***.*** port 22: Broken pipe
但是查看我的文档,我有以下文档:
(这些只是我确定要检索的文档中的2个)
我在Elasticsearch查询中错过了什么吗?
答案 0 :(得分:0)
由于此问题尚未升级,因此我采取了某种措施,为用户提供了经过硬编码的script
Elasticsearch提供
我做了这样的代码:
$temp =
[
"bool" => [
"must" => [
"script" => [
"script" => [
"source" => "(doc['mav_time_aired'].value.getHour() >= 6 && !(doc['mav_time_aired'].value.getHour() >= 9 && doc['mav_time_aired'].value.getMinute() >= 0)) || (doc['mav_time_aired'].value.getHour() >= 18 && !(doc['mav_time_aired'].value.getHour() >= 22 && doc['mav_time_aired'].value.getMinute() >= 0))",
"lang" => "painless"
]
]
]
]
];
除此之外,我仅添加了Elasticsearch的{{1}}布尔查询:
must_not
然后我就可以获取所需的文档