У меня возникли проблемы с записью запроса для запроса пользователей с активными событиями.Устранение неполадок с вычислением вложенных запросов и дат Elasticsearch
Краткая настройка У меня есть пользователи, у которых есть события с датами начала и окончания. Учитывая определенную дату, мне нужно знать, какие пользователи НЕ имеют активных событий в этот день. События индексируются как вложенные объекты, так как у них есть свои собственные модели.
Так вот некоторые данные
[
{
id: 1
name: 'MyUser',
events :[
{ id: 1, start: 02/01/2016, end: 02/05/2016 },
{ id: 2, start: 02/09/2016, end: 02/10/2016 },
]
},
{
id: 2
name: 'MyUser2',
events :[
{ id: 3, start: 02/02/2016, end: 02/04/2016 },
]
},
{
id: 3
name: 'MyUser3',
events :[
]
}
]
карта выглядит следующим образом
'events' => [
'type'=>'nested',
'properties'=>[
'start'=>[
'type' => 'date',
"format"=> "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
],
'end'=>[
'type' => 'date',
"format"=> "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd"
]
]
],
Таким образом, для примера запроса 02/08/2016, мне нужно, чтобы показать всем пользователям бесплатно, 02/04/2016 только пользователь 3 и 02/08/2016 только пользователи 1 и 3
мой запрос в настоящее время выглядит следующим образом
{
"filtered": {
"filter": {
"bool": {
"should": [{
"term": {
"events_count": 0
}
}, {
"nested": {
"path": "events",
"query": {
"bool": {
"must_not": [{
"range": {
"events.start": {
"lte" : "2016-02-08"
}
}
}, {
"range": {
"events.end": {
"gte": "2016-02-08"
}
}
}]
}
}
}
}]
}
}
}
}
я индексироваться events_count отдельным, потому что я уже отказался от смешения без вести с вложенными объектами он просто не работает, как ожидалось
Актуальные проблемы:
Так что проблема с этим пользователем пытаются соответствовать даты начала и окончания вместе, в настоящее время User1 соответствует критериям начала lte $ search_date, когда это не должно.
Логика, которую я пытаюсь написать, - это WHEN events.start < $ search_date AND events.end> $ search_date, считайте это совпадением.
Что на самом деле происходит, кажется, является его оценкой конечной логики запуска & как отдельная логика и, таким образом, если начать < $ search_date даже если .END < $ search_date считает этим совпадением.