我正在尝试为以下逻辑实现查询:
匹配结果,其中 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中,是否有任何优雅的方法来检查非字符串字段是否为Null?
答案 0 :(得分:1)
默认情况下,不对空值进行索引,并且Lucene无法有效地查找索引中未包含的内容。
您应在映射中使用@Field(indexNullAs = "...")
。在您的情况下,应将indexNullAs
设置为9999-12-31T23:59:59.999
(9999年最后一天的最后一个毫秒)。
有关更多信息,请参见the documentation about Field.indexNullAs。