匹配Hibernate Search查询中非字符串字段的null

时间:2018-07-10 11:20:08

标签: hibernate lucene hibernate-search

我正在尝试为以下逻辑实现查询:

  

匹配结果,其中 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?

1 个答案:

答案 0 :(得分:1)

默认情况下,不对空值进行索引,并且Lucene无法有效地查找索引中未包含的内容。

您应在映射中使用@Field(indexNullAs = "...")。在您的情况下,应将indexNullAs设置为9999-12-31T23:59:59.999(9999年最后一天的最后一个毫秒)。

有关更多信息,请参见the documentation about Field.indexNullAs