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

时间:2015-08-11 02:13:17

标签: java hibernate lucene hibernate-search

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

@Entity
public class Staff {
    @Id
    @NumericField
    protected Long id;
    // other fields
}

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

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

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

2 个答案:

答案 0 :(得分:4)

你是对的,你发现了一个我正在修复的错误HSEARCH-1960

您可以通过为 Id 属性定义其他字段来解决此问题,如下所示:

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

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

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

答案 1 :(得分:0)

我不会干扰id被索引的方式。在未来,这甚至可能不再可能。而是添加额外的@Field。您也可以通过注释为该字段指定专用名称。由于该字段为Long,因此将自动进行数字编码。