Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以在Hibernate Search 5.X中对@Id字段使用数字编码_Java_Hibernate_Lucene_Hibernate Search - Fatal编程技术网

Java 是否可以在Hibernate Search 5.X中对@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

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

@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字段作为目标,但我可以将它们作为数字进行索引。打开,请让我知道这是否是你的相同问题?