Hibernate Search没有正确索引嵌入式集合

时间:2011-06-22 21:17:57

标签: java hibernate lucene hibernate-search

我目前正在开发一个涉及使用Hibernate Search的项目。目前该项目使用纯SQL进行搜索,我们希望使用文本搜索(需要知道并正确拼写第一个单词可能会令人讨厌)。

架构是产品可以有多个版本,当前版本包含产品的名称。

Public Class Product extends ProgEntity
{
   private List<ProductVersion> versions = new ArrayList<ProductVersion>();
   ...
}

Public Class ProductVersion extends ProgEntity
{
    String productName;
    ...
}

我需要能够根据其名称搜索产品。我能够通过productName索引ProductVersions而没有什么问题,但索引产品被证明是一个更大的问题。

经过一番研究后,这就是我所拥有的,但是当我将产品更新到数据库时,没有创建索引。

@Entity
@Indexed
Public Class Product extends ProgEntity
{
   @IndexedEmbedded
   private List<ProductVersion> versions = new ArrayList<ProductVersion>();
   ...
}

@Entity
@Embeddable
Public Class ProductVersion extends ProgEntity
{
    @Field
    String productName;
    ...
}

DocumentID是ProgEntity的一部分。我需要确保,如果我更新产品或产品版本,它将被正确索引,现在似乎没有发生。

有关我的错误行为的任何建议吗?

2 个答案:

答案 0 :(得分:1)

您发布的代码中映射的Product和ProductVersion之间没有关系(例如,多对一,多对一)。这种关系必须是双向的。使用@IndexedEmbedded注释Product的集合字段,使用@ContainedIn注释ProductVersion一侧的反向字段,您应该全部设置。

答案 1 :(得分:0)

ProductVersion 上使用 @Entity @Embeddable 似乎是错误的。还有一些JPA注释缺失。 版本集合是否映射为 @ManyToOne @ElementCollection 。 你检查过你的hibernate配置和日志文件了吗?您使用的是哪个目录提供商?