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" }
                        }
                    ]
                }
            }
        }
    }
}
Другие вопросы по тегам