Java 使用hibernate搜索索引枚举类型字段

Java 使用hibernate搜索索引枚举类型字段,java,hibernate,lucene,hibernate-search,Java,Hibernate,Lucene,Hibernate Search,当我要使用的索引是枚举类型时,我在使用Hibernate搜索时遇到问题 下面是我的应用程序的示例: @Entity @Indexed public class MyEntity{ @Id @Field public Long id; @Field(bridge=@FieldBridge(impl=EnumBridge.class)) public Flavour flavour; } 与 然后,我尝试使用这种类型的查询查找所有实例 QueryBuilder qb

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

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

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

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

QueryBuilder qb = [~] ;
Query q = qb.keyword().onField("flavour").matching(Flavour.vanilla).createQuery();
当我测试这个时,结果总是空的。我甚至尝试使用Luke查看索引的内容,但我似乎没有找到“味道”。提交更改后,我会重新索引所有内容。 任何其他类型的索引和查询都可以在枚举字段以外的任何字段上完美地工作

我几乎尝试过
规范
分析
索引
存储
。。。
@字段的
注释(我正在使用Hibernate search 4.5.x和Hibernate 4.3.1)


我做错了什么?我应该查看哪些设置?欢迎提供任何帮助。

实体似乎使用序号存储味道(因此,列味道包含0而不是“香草”)

我不知道EnumBridge在做什么,但我建议将枚举存储为字符串:

@Entity
@Indexed
public class MyEntity{
    @Id
    @Field 
    public Long id;

    @Field(bridge=@FieldBridge(impl=EnumBridge.class))
    @Enumerated(EnumType.STRING)
    public Flavour flavour;
}

实体似乎使用序号存储味道(因此列味道包含0而不是“香草”)

我不知道EnumBridge在做什么,但我建议将枚举存储为字符串:

@Entity
@Indexed
public class MyEntity{
    @Id
    @Field 
    public Long id;

    @Field(bridge=@FieldBridge(impl=EnumBridge.class))
    @Enumerated(EnumType.STRING)
    public Flavour flavour;
}

你有数据样本吗?你有数据样本吗?这个答案帮助解决了部分问题(最大的问题)。但主要的一点是,如果没有注释,DB使用序数(这是不好的,因为这种格式可以通过像一些自动重构工具那样重新排列枚举常量来打破)。这个答案帮助解决了部分问题(最大的问题)。但主要的一点是,如果没有该注释,DB将使用序数(这是不好的,因为这种格式可以通过像某些自动重构工具那样对枚举常量重新排序来破坏)。