Elastic Search - значение фильтра по последней дате
В упругом поиске у нас есть документ с разными значениями. Каждое значение имеет период. Период сообщает, является ли значение все еще актуальным, и указывает, в каком периоде значение является актуальным.
Пример ниже:
"": [
{
"memberType": user,
"period": {
"validFrom": "1964-08-23",
"validTo": "2008-12-31"
},
},
{
"memberType": admin,
"period": {
"validFrom": "2008-12-31",
"validTo": null
}
}
]
В нашем запросе я хочу фильтровать по memberType. Но иметь дело только с новым типом члена. Поэтому, если я фильтрую по memberType "user", приведенный выше документ не должен совпадать, потому что фактический memberType - admin.
В приведенном выше примере я мог бы фильтровать с помощью логического фильтра по memberType и отсутствующего поля в поле validTo.
Но если этот человек вообще недействителен, для обоих будет определена дата validTo, и тогда мне придется взглянуть на самую новую дату.
Как я могу этого достичь? Я имею в виду вложенный запрос или пользовательский фильтр сценариев. Но я не знаю, как выразить запрос.
заранее спасибо
1 ответ
При условии, что ваше имя поля для этого массива - memberDetails, вы можете использовать этот запрос для достижения того, что вам нужно.
{
"query" : { "match_all" : {} },
"filter" : {
"nested" : {
"path" : "memberDetails",
"filter" : {
"bool" : {
"must" : [
{
"term" : {"memberType" : "user"}
},
{
"missing" : { "field" : "validTo" }
}
]
}
}
}
}
}