У меня есть эластичный индекс с тысячами таких документов.
{
Name: John Doe,
FirstJobStartDate: 8/9/2016,
FirstJobEndDate:1/4/2019,
SecondJobStartDate:7/4/2019,
SecondJobEndDate:8/8/2020,
ThirdJobStartDate: 1/9/2020,
}
Все остальные поля, за исключением Name и FirstJobStartDate, являются необязательными и могут как присутствовать, так и отсутствовать в документе.
Мне нужно получить 4 числа:
1) Сколько документов имеют FirstJobEndDate? Это просто
{
"size":1,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"exists": {
"field": "FirstJobEndDate"
}
}
]
}
}
}
}
}
Теперь это становится сложным:
2) Сколько документов имеют FirstJobEndDate меньше текущей даты, и у них нет ДАЖЕ ОДНОГО из (SecondJobStartDate, SecondJobEndDate или ThirdJobStartDate)?
3) Сколько документов имеют FirstJobEndDate, а также имеют ЛЮБУЮ ОДНУ из (SecondJobStartDate, SecondJobEndDate, ThirdJobStartDate) и ЛЮБУЮ из этих дат находятся в пределах 1 года от FirstJobEndDate?
4) Сколько документов имеют FirstJobEndDate, а также имеют ЛЮБУЮ ОДНУ из (SecondJobStartDate, SecondJobEndDate, ThirdJobStartDate) и НИ ОДНА из этих дат не находится в пределах 1 года от FirstJobEndDate?
Я считаю, что это можно сделать с помощью правильного сочетания слов «должен» и «следует», но не могу найти четкого решения из-за сравнения двух дат в одном документе.
Просто для подтверждения: все даты являются допустимыми полями эластичного типа даты, а не строками.
Любая помощь будет принята с благодарностью. Эластичная версия: 2.4