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 视为数值?
您是对的,您发现了一个错误,我现在将其修复为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的最佳方式。
| 归档时间: |
|
| 查看次数: |
618 次 |
| 最近记录: |