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

时间:2014-04-14 09:17:32

标签: java hibernate lucene hibernate-search

当我想要使用的索引属于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注释的analyzeindexstore@Field,...的任意组合(我正在使用Hibernate-search 4.5.x with hibernate 4.3.1)。

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

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;
}