gpt4 book ai didi

java - Hibernate 搜索索引嵌入图

转载 作者:行者123 更新时间:2023-11-30 04:17:36 25 4
gpt4 key购买 nike

我在使用 Hibernate 搜索索引嵌入文本实体时遇到一些问题。由于实体扩展了我无法更改的其他实体,因此使用注释是不可行的。

因此,我使用编程 API 进行映射。但是,Hibernate 搜索不会对嵌入的文本实体建立索引。

下面是实体模型的一个简短示例(为了简单起见,进行了精简):

@Entity
class Article {
@Id
private long uid;

private String articleNumber;

@OneToMany ( mappedBy = "article" )
@MapKey( name = "languageCode" )
private Map<String, ArticleText> texts;
...
}

@Entity
class ArticleText {
@ManyToOne
private ArticleEntity article;

private String languageCode;
private String someText;
...
}

@Entity
class SpecialArticle extends Article {
private String someSpecialAttribute;
}

这是映射的摘录:

SearchMapping mapping = ...;
mapping.entity( SpecialArticle.class )
.indexed()
.property( "uid", ElementType.FIELD ).documentId()
.property( "articleNumber", ElementType.FIELD ).field()
.property( "someSpecialAttribute", ElementType.FIELD ).field()
.property( "texts", ElementType.FIELD )
.indexEmbedded().targetElement( ArticleText.class ).entity( ArticleText.class )
.property( "article", ElementType.FIELD ).containedIn()
.property( "someText", ElementType.FIELD ).field();

文档对于使用 .indexEmbedded().entity(...) 不太清楚,但我有另一个嵌入实体(多对一关联),它仅被索引使用类似的映射。

我怀疑文本未映射,因为正在使用 map 并且 Hibernate Search 无法将该属性识别为 map 。有一个 MapBrigde 以及一个 BuildInMapBridge,但在构建映射时似乎没有使用它们。

我可能缺少什么或者哪里可能有错误?

顺便说一句,我在 Hibernate Search 4.0.1 和 Hibernate 4.0.1 环境中执行此操作。

最佳答案

看来我已经找到解决办法了。由于文档似乎不太清楚,所以我将其添加到这里以供其他人查找。

问题似乎是对文本的引用是父类(super class) Article 的字段,因此当映射 SpecialArticle 时,Hibernate Search 似乎遇到困难.

为了使其工作,必须更改映射以包含父类(super class):

SearchMapping mapping = ...;
mapping.entity( SpecialArticle.class )
.indexed()
.property( "uid", ElementType.FIELD ).documentId()
.property( "someSpecialAttribute", ElementType.FIELD ).field();

//Map the super class directly, but don't call "indexed()"
mapping.entity( Article.class )
.property( "articleNumber", ElementType.FIELD ).field()
.property( "texts", ElementType.FIELD )
.indexEmbedded().targetElement( ArticleText.class ).entity( ArticleText.class )
.property( "article", ElementType.FIELD ).containedIn()
.property( "someText", ElementType.FIELD ).field();

奇怪的是,articleNumber 也会出现该问题,但 uid 却不会(可能是因为 documentId())。

关于java - Hibernate 搜索索引嵌入图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17948959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com