我目前正在做一个项目,涉及到使用hibernate搜索。目前,该项目使用纯sql进行搜索,我们希望使用文本搜索代替(需要知道并正确拼写第一个单词可能会变得烦人)。
架构是一个产品可以有多个版本,而当前版本包含产品的名称。

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

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

我需要能够搜索基于其名称的产品。我能够用产品名称索引产品版本,但很少有问题,但索引产品被证明是一个更大的问题。
经过一些研究,这是我的东西,但当我更新产品到数据库没有索引创建。
@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是progenti的一部分。我需要确保,如果我更新产品或产品版本,它将被正确索引,而现在似乎没有发生。
有什么我做错的建议吗?

最佳答案

您发布的代码中映射的产品和产品版本之间没有关系(例如多对一、多对一)。这种关系必须是双向的。用@indexedembedded注释产品的collection字段,用@containedin注释productversion端的inverse字段,您应该都被设置好了。

10-07 13:03