IndexedEmbedded用此注解标注的对象为被嵌入对象,比如我在Blog类中有一个Auther auther的属性,当用@IndexedEmbedded标注此属性时,表示可以用auther.(Auther的属性)进行搜索。当@IndexedEmbedded标注的为一个对象,则在此对象中进行搜索,最终返回的是一个对象。当其标注的是一个集合(如Set<Auther> authers)时,则在所有是集合中搜索,返回的可能是多个对象。
@ContainedIn根据官方API的解释是用于维护被嵌入对象的一致性,也就是说,为了维护当上面例子上auther改变时Blog中对应于auther的索引也更新,但在实际运用中,并不会产生这样的效果。
比如当我添加一篇blog时,指定的auther为admin,此时可以根据auther.name为admin搜索出这篇blog。但如果此时把admin改为admins,理论上应该用admins把这篇blog搜索出来,但实际上还是用admin才能把这篇blog搜索出来。所以把admin改为admins只是在Auther中更新了索引,但在Blog中未更新索引,此时的索引需要我们手动去更新此auther对应的所有的Blog。
至此,好像添加@ContainedIn没有启动应有的作用,根据去Hibernate Search官方论坛了解到,即使添加了@ContainedIn也需要开发者去维护双方的索引的一致性。
下面是我用到了两个实体类
@Indexed
@Entity
@Table(name="blog")
public class Blog {
private String id;
private String title;
private String content;
private Date createDate;
private int sort;
private Set<BlogType> blogTypes;
private Auther auther;
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name="system-uuid", strategy="uuid")
@DocumentId
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column
@Field(name="title",index=Index.TOKENIZED,store=Store.YES)
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Column
@Field(name="content",index=Index.TOKENIZED,store=Store.NO)
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Column
@Field(name="date",index = Index.UN_TOKENIZED, store = Store.YES)
@DateBridge(resolution = Resolution.DAY)
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
@Field(name="sort",index = Index.UN_TOKENIZED, store = Store.YES)
@NumericField
@Column
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
@OneToMany(mappedBy="blog")
public Set<BlogType> getBlogTypes() {
return blogTypes;
}
public void setBlogTypes(Set<BlogType> blogTypes) {
this.blogTypes = blogTypes;
}
@ManyToOne
@JoinColumn(name="autherId")
@IndexedEmbedded
public Auther getAuther() {
return auther;
}
public void setAuther(Auther auther) {
this.auther = auther;
}
}
@Indexed
@Entity
@Table(name="auther")
public class Auther {
private String id;
private String name;
private Set<Blog> blogs;
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name="system-uuid", strategy="uuid")
@DocumentId
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column
@Field(name="authername",index=Index.TOKENIZED,store=Store.YES)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ContainedIn
@OneToMany(mappedBy="auther",cascade = CascadeType.ALL)
public Set<Blog> getBlogs() {
return blogs;
}
public void setBlogs(Set<Blog> blogs) {
this.blogs = blogs;
}
}
分享到:
相关推荐
《Hibernate Search in Action》这本书深入探讨了Hibernate Search这一强大的全文搜索引擎集成框架,它将全文搜索功能无缝地融入到Java持久层框架Hibernate之中。通过利用Lucene库的强大功能,Hibernate Search为...
Hibernate Search和Lucene都允许根据各种标准对文档进行评分,其中最重要的就是相关性评分。相关性评分帮助系统确定哪些文档对于特定查询更为重要,然后根据这个评分对搜索结果进行排序,将最相关的文档排在最前面。...
通常,这涉及到在`pom.xml`(如果你的项目是Maven)或`build.gradle`(如果是Gradle)文件中添加Hibernate Search和Lucene库。例如: ```xml <groupId>org.hibernate <artifactId>hibernate-search-orm ...
这个“hibernateSearch+demo”项目提供了一个实战示例,帮助开发者理解并应用 Hibernate Search 的核心概念和功能。 在 Hibernate Search 中,主要涉及以下关键知识点: 1. **全文索引**:Hibernate Search 使用 ...
《Hibernate Search in Action》是一本深入探讨Hibernate Search技术的专业书籍,配合源代码一同学习,能够帮助读者更好地理解和应用这项强大的全文检索和分析框架。Hibernate Search是Hibernate ORM的一个扩展,它...
《Hibernate Search in ...综上,《Hibernate Search in Action》这本书将深入探讨如何利用Hibernate Search构建高效、实用的全文搜索功能,为Java开发者提供了强大的工具,以提升应用程序的用户体验和功能完整性。
本文将深入探讨如何创建和查询Hibernate Search的全文索引。 首先,我们来看一下`hibernate-search-analyzers-4.1.1.Final.jar`这个库。这个文件包含了Hibernate Search使用的各种分析器,分析器是处理文本的关键...
Hibernate Search的作用是对数据库中的数据进行检索的。它是hibernate对著名的全文检索系统Lucene的一个集成方案,作用在于对数据表中某些内容庞大的字段(如声明为text的字段)建立全文索引,这样通过hibernate ...
1. **配置依赖**:首先,你需要在项目中添加Spring和Hibernate Search的依赖。通常,这可以通过Maven或Gradle的配置完成。 2. **实体类注解**:在你的实体类上使用`@Indexed`注解,声明该类的实例需要被索引。然后...
使用hibernate search实现全文检索和文档管理功能: 1 全文检索 2 手动生成索引 3 文档上传(自动建立索引) 4 文档更新(自动建立索引) 5 文档删除 使用说明: 1 需要先恢复数据库 searchDB_2008sqlserver.bak 2 ...
Hibernate Search 是一个强大的全文搜索引擎框架,它将Apache Lucene库集成到Hibernate ORM中,使得在Java应用程序中实现复杂的全文检索和分析功能变得简单。这个"hibernate-search-5.5.4 api docset for Dash"是...
hibernate-search, Hibernate Search Hibernate 搜索版本:5.8.0. Final - 13-09-2017描述针对Java对象的全文搜索这个项目提供 Hibernate ORM和全文索引服务( 如 Apache Lucene和 Elasticsearch
hibernate
本资源提供了基于Hibernate Search实现的全文搜索引擎的完整代码和配置文件,适用于处理中英文数据,具备拼音搜索、错误纠正和搜索建议等高级功能。 Hibernate Search是Hibernate ORM的一个扩展,它允许开发者在...
这个3.4.0.Final版本是Hibernate Search历史上的一个重要里程碑,它在功能、性能和稳定性上都达到了一个全新的高度。 Hibernate Search的核心是Lucene,一个著名的全文搜索引擎库。通过集成Lucene,Hibernate ...
本篇文章将深入探讨Hibernate Search的源码,帮助你理解其工作原理,并提供研究和学习的指导。 **1. 概述** Hibernate Search的核心功能是通过Apache Lucene库实现的全文检索。它允许开发者对持久化的实体对象进行...