在从4.5版升级到Hibernate Search 5之前,我们的系统将所有文档ID索引为数字字段:
@Entity
public class Staff {
@Id
@NumericField
protected Long id;
// other fields
}
这允许我们使用数值范围查询。在Hibernate 5中,所有文档ID都被索引为字符串,上面的注释会导致异常。如果没有注释,则所有数值范围查询都无法正确搜索ID字段。
切换到TermRangeQuery而不是NumericRangeQuery将是乏味的,我希望避免这种情况。
有没有办法继续将ID视为数值?
答案 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
,因此将自动进行数字编码。