当我想要使用的索引是 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();
当我对此进行测试时,结果总是为空。我什至尝试使用卢克查看索引的内容,但我似乎没有找到“味道”。提交更改后,我会重新索引所有内容。 所有其他类型的索引都可以工作,查询也可以在除枚举字段之外的任何内容上完美工作。
我几乎尝试了规范
、分析
、索引
、存储
等的任何组合。 @Field
注释(我使用 Hibernate-search 4.5.x 和 hibernate 4.3.1)。
我做错了什么?我应该查看哪些设置?欢迎任何帮助。
最佳答案
该实体似乎使用序数来存储 flavor (因此列 flavor 包含 0 而不是“vanilla”)。
我不知道 EnumBridge 在做什么,但我建议将枚举存储为字符串:
@Entity
@Indexed
public class MyEntity{
@Id
@Field
public Long id;
@Field(bridge=@FieldBridge(impl=EnumBridge.class))
@Enumerated(EnumType.STRING)
public Flavour flavour;
}
关于java - 使用 hibernate-search 索引 Enum 类型字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056329/