使用hibernate-search索引Enum类型字段

le-*_*ude 2 java lucene hibernate hibernate-search

当我想要使用的索引是Enum类型时,我在使用Hibernate搜索时遇到问题.

以下是我的应用程序的示例:

@Entity
@Indexed
public class MyEntity{
   @Id
   @Field 
   public Long id;
   @Field(bridge=@FieldBridge(impl=EnumBridge.class))
   public Flavour flavour;
}
Run Code Online (Sandbox Code Playgroud)

public enum Flavour {
  vanilla,
  chocolate,
  strawberry,
  pistacchio;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用这种类型的查询查找所有实例.

QueryBuilder qb = [~] ;
Query q = qb.keyword().onField("flavour").matching(Flavour.vanilla).createQuery();
Run Code Online (Sandbox Code Playgroud)

当我测试这个时,结果总是空的.我甚至试图用Luke看到索引的内容,我似乎没有找到"味道".在提交更改后,我会对所有内容进行重新索引.除了枚举字段之外,其他任何类型的索引工作和查询都能完美地工作.

我已经试过几乎任意组合norms,analyze,index,store,...的的@Field注释(我用用Hibernate 4.3.1休眠搜索4.5.x).

我究竟做错了什么?我应该看的任何设置?欢迎任何帮助.

Die*_*ein 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;
}
Run Code Online (Sandbox Code Playgroud)