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

标签 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();

当我对此进行测试时,结果总是为空。我什至尝试使用卢克查看索引的内容,但我似乎没有找到“味道”。提交更改后,我会重新索引所有内容。 所有其他类型的索引都可以工作,查询也可以在除枚举字段之外的任何内容上完美工作。

我几乎尝试了规范分析索引存储等的任何组合。 @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/

相关文章:

java - 与从 Java 应用程序调用的 Powershell 进程交互

java - Spring在启动时不实例化bean

java - 在 LAN Java/Android 中查找确切的设备

Hibernate JPA QueryBuilder.like

java - 如何在 Lucene 4 中使用 BrazilianStemmer?

最多提供一次相等元素的java.util.Queue实现

java - 将数据库模式保存在文件中使用 java?

java - Hibernate @OneToOne Mapping 不加入专栏?

java - 在java jTable中显示lucene搜索结果

java - 如何将lucene36转移到lucene 40