Соответствует нулю нестрокового поля в поисковом запросе Hibernate

Я пытаюсь реализовать запрос для следующей логики:

Результаты сопоставления, где endDate выше, ИЛИ endDate нет (то есть, ноль)

Пока что я могу сделать первую часть следующим образом:

dateQuery = queryBuilder.range()
                        .onField("endDate")
                        .above(LocalDateTime.now())
                        .createQuery();

К сожалению, я не могу понять вторую часть. Я попробовал это (и не удалось):

queryBuilder.bool()
            .must(dateQuery)
            .should(queryBuilder.keyword().onField("endDate")
                                .matching("").createQuery())
            .createQuery();

Есть ли какой-нибудь элегантный способ проверить, является ли нестроковое поле пустым в Hibernate Search?

1 ответ

Решение

По умолчанию нулевые значения не индексируются, и Lucene не может эффективно искать то, чего нет в индексе.

Вы должны использовать @Field(indexNullAs = "...") в вашем отображении. В вашем случае вы должны установить indexNullAs что-то вроде 9999-12-31T23:59:59.999 (последняя миллисекунда последнего дня года 9999).

См. Документацию о Field.indexNullAs для получения дополнительной информации.

Другие вопросы по тегам