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

Match null of non-string field in Hibernate Search query

我正在尝试针对以下逻辑执行查询:

Match results where endDate is above now OR endDate is not present (i.e. null)

到目前为止,我能够完成第一部分如下:

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

不幸的是,我无法理解第二部分。我试过这个(但失败了):

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

在 Hibernate Search 中是否有任何优雅的方法来检查非字符串字段是否为 Null?

默认情况下不为 null 值编制索引,Lucene 无法有效地查找不在索引中的内容。

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

有关详细信息,请参阅 the documentation about Field.indexNullAs