Elasticsearch-确定给定时间是否在TIME范围内

时间:2019-07-10 10:13:23

标签: elasticsearch

Elasticsearch:v7.2
应用:Laravel v5.7

我正在尝试查询我的文档是否属于某个时间范围

这是我的索引的mav_time_aired字段映射:

enter image description here

现在,我想过滤或提取特定时间范围内的文档(我想以mav_time_aired06:00:0009: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属性,我必须能够从字面上将文档数据格式化为所需的格式。

现在使用给定的查询,我希望我应该能够获取所需的输出,但是不幸的是,查询的结果是:

Emptypacket_write_wait: Connection to **.**.***.*** port 22: Broken pipe

但是查看我的文档,我有以下文档:

enter image description here

enter image description here

(这些只是我确定要检索的文档中的2个)

我在Elasticsearch查询中错过了什么吗?

1 个答案:

答案 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

然后我就可以获取所需的文档