Я думаю, что проблема в вашем запросе, а не в индексации.indexNullAs
работает для LocalDate
на Elasticsearch
(я только что проверил это дважды).
Как вы строите свои запросы?Если вы используете indexNullAs
, вам, вероятно, следует использовать наш DSL.
В любом случае это работает:
QueryBuilder queryBuilder = session.getSearchFactory().buildQueryBuilder().forEntity( MyEntity.class ).get();
Query luceneQuery = queryBuilder.keyword()
.onField( "nullableDate" )
.matching( LocalDate.of( 2999, Month.DECEMBER, 31 ) )
.createQuery();
result = session.createFullTextQuery( luceneQuery, MyEntity.class ).list();
И это тоже:
QueryBuilder queryBuilder = session.getSearchFactory().buildQueryBuilder().forEntity( MyEntity.class ).get();
Query luceneQuery = queryBuilder.keyword()
.onField( "nullableDate" )
.matching( null )
.createQuery();
result = session.createFullTextQuery( luceneQuery, MyEntity.class ).list();
Ожидается тот факт, что Hibernate Search отправляет «ноль», и на самом деле это особенность: он позволяет правильно извлекать ноль при использовании проекций.Что касается индексации, отображение Elasticsearch (то есть схема), сгенерированное Hibernate Search и отправленное в Elasticsearch, должно включать в себя что-то вроде этого:
properties: {
...
"nullableDate": {
"type": "date",
"format": "yyyyyyyyy-MM-dd",
"null_value": "2999-12-31"
}
...
}
Часть null_value
означает, что всякий раз, когда Elasticsearch получает нулевое значение, онобудет индексировать его как «2999-12-31».Это именно то, что вы хотели.
Кстати, HSEARCH-3099 - лишь задача напомнить нам о необходимости добавить эту функцию в Hibernate Search 6;это никак не влияет на 5.11.