Java 是否可以在Hibernate Search 5.X中对@Id字段使用数字编码
在从4.5版升级到Hibernate Search 5之前,我们的系统将所有文档ID作为数字字段进行索引:Java 是否可以在Hibernate Search 5.X中对@Id字段使用数字编码,java,hibernate,lucene,hibernate-search,Java,Hibernate,Lucene,Hibernate Search,在从4.5版升级到Hibernate Search 5之前,我们的系统将所有文档ID作为数字字段进行索引: @Entity public class Staff { @Id @NumericField protected Long id; // other fields } 这允许我们使用数值范围查询。在Hibernate5中,所有文档ID都作为字符串索引,上面的注释会导致异常。如果没有注释,所有数值范围查询都无法正确搜索ID字段 切换到TermRangeQue
@Entity
public class Staff {
@Id
@NumericField
protected Long id;
// other fields
}
这允许我们使用数值范围查询。在Hibernate5中,所有文档ID都作为字符串索引,上面的注释会导致异常。如果没有注释,所有数值范围查询都无法正确搜索ID字段
切换到TermRangeQuery而不是NumericRangeQuery将是乏味的,我希望避免这种情况
有没有办法继续将ID视为数值 你说得对,你发现了一个bug,我现在正在修复它 您可以通过为Id属性定义一个附加字段来解决此问题,如下所示:
@Entity
public class Staff {
@Id
@Field(name="id_numeric")
@NumericField(forField="id_numeric")
protected Long id;
// other fields
}
然后在字段“id\u numeric”而不是“id”上运行范围查询
在Hibernate Search的未来版本中,我们可能会将所有ID编码为docValue,因为这样效率更高。这意味着上述解决方法将是将其编码为数字字段的最佳方式。我不会干扰id的索引方式。在未来,这甚至可能不再可能。而是添加一个额外的
@字段
。也可以通过注释为字段指定专用名称。由于该字段是长的
,它将自动进行数字编码。是在索引期间还是在查询时引发的异常?我有一个测试,它确认我不能用数字查询将Id字段作为目标,但我可以将它们作为数字进行索引。打开,请让我知道这是否是你的相同问题?