当我想要使用的索引属于Enum类型时,我在使用Hibernate搜索时遇到问题。
以下是我的应用程序的示例:
@Entity
@Indexed
public class MyEntity{
@Id
@Field
public Long id;
@Field(bridge=@FieldBridge(impl=EnumBridge.class))
public Flavour flavour;
}
带
public enum Flavour {
vanilla,
chocolate,
strawberry,
pistacchio;
}
然后我尝试使用这种类型的查询查找所有实例。
QueryBuilder qb = [~] ;
Query q = qb.keyword().onField("flavour").matching(Flavour.vanilla).createQuery();
当我测试时,结果总是空的。我甚至试图用Luke看到索引的内容,而我似乎并没有找到" flavor"。在提交更改后,我会对所有内容进行重新索引。 除了枚举字段之外,其他任何类型的索引工作和查询都可以完美地工作。
我几乎尝试了norms
注释的analyze
,index
,store
,@Field
,...的任意组合(我正在使用Hibernate-search 4.5.x with hibernate 4.3.1)。
我做错了什么?我应该看的任何设置?欢迎任何帮助。
答案 0 :(得分:5)
实体似乎使用序数来存储味道(因此列味道包含0而不是“香草”)。
我不知道,EnumBridge正在做什么,但我建议将枚举存储为字符串:
@Entity
@Indexed
public class MyEntity{
@Id
@Field
public Long id;
@Field(bridge=@FieldBridge(impl=EnumBridge.class))
@Enumerated(EnumType.STRING)
public Flavour flavour;
}