Elasticsearch - определить, находится ли данное время в пределах диапазона TIME - PullRequest
0 голосов
/ 10 июля 2019

Elasticsearch: v7.2
Приложение: Laravel v5.7

Я пытаюсь запросить, относится ли мой документ к определенному диапазону времени

Вот мой индекс mav_time_airedотображение полей:

enter image description here

Теперь я хочу фильтровать или извлекать документы, которые находятся в определенном временном диапазоне (я хочу получать документы с помощью mav_time_aired значение в пределах 06:00:00 до 09:00:00 ИЛИ 18:00:00 до 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

Но, просматривая мои документы, у меня есть эти документы:

enter image description here

enter image description here

(Это только 2 из документов, которые я определилчто нужно получить)

Я что-то пропустил из запроса Elasticsearch?

1 Ответ

0 голосов
/ 15 июля 2019

Поскольку это еще не обострилось, я немного прибегнул к выполнению жестко закодированного scriptasticsearch для своих пользователей

Я сделал код примерно так:

$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"
                ]
            ]
        ]
    ]
];

и дляостальное я просто добавил must_not логический запрос Elasticsearch:

$temp =
[
    "bool" => [
        "must_not" => [
            "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"
                ]
            ]
        ]
    ]
];

Затем я смог получить нужные документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...