我目前正在做一个项目,涉及到使用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字段,您应该都被设置好了。