Соответствует нулю нестрокового поля в поисковом запросе 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 для получения дополнительной информации.