是否可以在 Hibernate Search 5.X 中对 @Id 字段使用数字编码

Kev*_*vin 3 java lucene hibernate hibernate-search

在从 4.5 版升级到 Hibernate Search 5 之前,我们的系统将所有文档 ID 索引为数字字段:

@Entity
public class Staff {
    @Id
    @NumericField
    protected Long id;
    // other fields
}
Run Code Online (Sandbox Code Playgroud)

这允许我们使用数字范围查询。在 Hibernate 5 中,所有文档 ID 都被索引为字符串,上面的注释会导致异常。如果没有注释,所有数字范围查询都无法正确搜索 ID 字段。

切换到 TermRangeQuery 而不是 NumericRangeQuery 会很乏味,我希望避免这种情况。

有没有办法继续将 ID 视为数值?

San*_*nne 5

您是对的,您发现了一个错误,我现在将其修复为HSEARCH-1960

您可以通过为您的Id属性定义一个附加字段来解决这个问题,如下所示:

@Entity
public class Staff {
    @Id
    @Field(name="id_numeric")
    @NumericField(forField="id_numeric")
    protected Long id;
    // other fields
}
Run Code Online (Sandbox Code Playgroud)

然后在字段“id_numeric”而不是“id”上运行范围查询。

在 Hibernate Search 的未来版本中,我们可能会将所有 Id 编码为 DocValues,因为这样效率更高。这意味着上述解决方法将是能够将其编码为NumericField的最佳方式。