我尝试了多种方法来通过关键字查询在数据库中搜索Long字段。我总是会出错,因为Hibernate Search会将Long索引为数字字段。我已经尝试过使用FieldBridge,但是那根本行不通。这是我要搜索的字段。
@Field
@Column(unique = true)
private Long numericField;
答案 0 :(得分:1)
在此问题上我找不到任何在线内容,因此我在这里以问答形式发布答案。我想出了一种使用动态字段的方法,如下所示:
@Column(unique = true)
private Long numericField;
@Field(name="numericField", analyze = Analyze.NO, index=Index.YES)
public String getNumericFieldAsString(){
return numericField.toString();
}
该字段现在被动态索引为字符串,我可以在关键字查询中使用它。
答案 1 :(得分:1)
关键字查询很好地支持长字段:查询时只需提供长值,因为字段的类型为long。因此,在将其传递给Hibernate Search之前,只需使用Long.parseLong
将用户提供的文本值转换为很长的时间即可。
在某些情况下,您可能确实需要将字符串字段用作数字值。例如,如果您要在同一关键字查询中定位多个字段,而其他一些字段是字符串字段。
然后your answer可以很好地工作,尽管不幸的是它具有一些副作用,这些副作用将导致Hibernate Search更频繁地为数据重新编制索引(因为它不知道getNumbericFieldAsString
从何处准确地获取数据)。
或者,您可以使用网桥,既可以是自定义网桥,也可以只使用内置在Hibernate Search 5中的网桥:
@Column(unique = true)
@Field(name="numericField", analyze = Analyze.NO, bridge = @FieldBridge(impl = org.hibernate.search.bridge.builtin.LongBridge.class))
private Long numericField;
有关自定义桥接的信息,see here for Hibernate Search 5和here for Hibernate Search 6(较新的Hibernate Search版本,具有不同的API)。