Я использую Java-клиент высокого уровня (6.5), и мне нужно отфильтровать данные по некоторому диапазону дат - пусть у меня есть эти 4 документа (добавлено изображение почтальона) в одном индексе и в 2 документах, которые я не использую. у меня нет полей publish_date и publish_end_date, поэтому, когда я укажу диапазон, мне понадобятся документы, которые будут находиться между этим диапазоном, и документы, которые также не имеют этих полей диапазона.
Значения Json
Я получил некоторую помощь от этого вопроса
ElasticSearch (2.2) Java-фильтр между startDate и endDate, если существует , поскольку QueryBuilders.missingQuery устарело, поэтому я использую mustNot (QueryBuilders.existsQuery) , взяв ссылка здесь , но она не работает, и я не получаю результаты.
когда я использую только запрос диапазона, как показано ниже его рабочего штрафа-
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_date").lte("now"));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_end_date").gte("now"));
![result 1](https://i.stack.imgur.com/b3c6i.png)
Когда я использую только запрос mustNot, как показано ниже, я получаю желаемые результаты -
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.mustNot(QueryBuilders.existsQuery("publish_date"));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.mustNot(QueryBuilders.existsQuery("publish_end_date"));
![result 2](https://i.stack.imgur.com/XAtYk.png)
Но проблема в том, что когда я объединяю оба запроса, как показано ниже, я не получаю никакого результата (получаю пустой массив) -
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_date").lte("now"))
.mustNot(QueryBuilders.existsQuery("publish_date"));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_end_date").gte("now"))
.mustNot(QueryBuilders.existsQuery("publish_end_date"));
![result 3](https://i.stack.imgur.com/CrrlK.png)
Я хочу, чтобы все результат 1 и результат 2 значений в результат 3 (это мое требование).