Я использую Java-клиент высокого уровня (6.5) и мне нужно отфильтровать данные по некоторому диапазону дат - пусть у меня есть эти 4 документа (добавлено изображение почтальона) в одном индексе и в 2 документах, которые я не используюу меня нет полей publish_date и publish_end_date, поэтому, когда я укажу диапазон, мне понадобятся документы, которые будут находиться между этим диапазоном, и документы, которые также не имеют этих полей диапазона.
Мои требования соответствуют этому вопросу
ElasticSearch (2.2) Java-фильтр между startDate и endDate, если существует
Но QueryBuilders.missingQuery показывает неопределенный для QueryBuilders в 6.5.
Возможно ли это?
Я изменил запрос, как показано ниже -
, когда я использую только запрос диапазона как показано ниже, работает нормально -
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_date").lte("now"));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.must(QueryBuilders.rangeQuery("publish_end_date").gte("now"));
Когда я использую только запрос mustNot , как показано ниже, я получаю желаемые результаты -
BoolQueryBuilder startDateQuery = new BoolQueryBuilder()
.mustNot(QueryBuilders.existsQuery("publish_date"));
BoolQueryBuilder endDateQuery = new BoolQueryBuilder()
.mustNot(QueryBuilders.existsQuery("publish_end_date"));
Нопроблема вкогда я смешиваю оба запроса , как показано ниже, я не получаю никакого результата (получаю пустой массив) -
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"));