`
zm2011
  • 浏览: 39150 次
社区版块
存档分类
最新评论

Hibernate search的@ContainedIn和@IndexedEmbedded

阅读更多
       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 in Action》这本书深入探讨了Hibernate Search这一强大的全文搜索引擎集成框架,它将全文搜索功能无缝地融入到Java持久层框架Hibernate之中。通过利用Lucene库的强大功能,Hibernate Search为...

    Hibernate Search In Action

    Hibernate Search和Lucene都允许根据各种标准对文档进行评分,其中最重要的就是相关性评分。相关性评分帮助系统确定哪些文档对于特定查询更为重要,然后根据这个评分对搜索结果进行排序,将最相关的文档排在最前面。...

    Hibernate Search配置及简单应用

    通常,这涉及到在`pom.xml`(如果你的项目是Maven)或`build.gradle`(如果是Gradle)文件中添加Hibernate Search和Lucene库。例如: ```xml &lt;groupId&gt;org.hibernate &lt;artifactId&gt;hibernate-search-orm ...

    hibernateSearch+demo

    这个“hibernateSearch+demo”项目提供了一个实战示例,帮助开发者理解并应用 Hibernate Search 的核心概念和功能。 在 Hibernate Search 中,主要涉及以下关键知识点: 1. **全文索引**:Hibernate Search 使用 ...

    Hibernate Search in action (pdf && code)

    《Hibernate Search in Action》是一本深入探讨Hibernate Search技术的专业书籍,配合源代码一同学习,能够帮助读者更好地理解和应用这项强大的全文检索和分析框架。Hibernate Search是Hibernate ORM的一个扩展,它...

    Hibernate Search in Action

    《Hibernate Search in ...综上,《Hibernate Search in Action》这本书将深入探讨如何利用Hibernate Search构建高效、实用的全文搜索功能,为Java开发者提供了强大的工具,以提升应用程序的用户体验和功能完整性。

    hibernate search全文索引的创建及查询

    本文将深入探讨如何创建和查询Hibernate Search的全文索引。 首先,我们来看一下`hibernate-search-analyzers-4.1.1.Final.jar`这个库。这个文件包含了Hibernate Search使用的各种分析器,分析器是处理文本的关键...

    Hibernate搜索框架HibernateSearch.zip

    Hibernate Search的作用是对数据库中的数据进行检索的。它是hibernate对著名的全文检索系统Lucene的一个集成方案,作用在于对数据表中某些内容庞大的字段(如声明为text的字段)建立全文索引,这样通过hibernate ...

    基于Spring的Hibernate Search全文检索功能示例

    1. **配置依赖**:首先,你需要在项目中添加Spring和Hibernate Search的依赖。通常,这可以通过Maven或Gradle的配置完成。 2. **实体类注解**:在你的实体类上使用`@Indexed`注解,声明该类的实例需要被索引。然后...

    使用hibernate search实现全文检索和文档管理的例子

    使用hibernate search实现全文检索和文档管理功能: 1 全文检索 2 手动生成索引 3 文档上传(自动建立索引) 4 文档更新(自动建立索引) 5 文档删除 使用说明: 1 需要先恢复数据库 searchDB_2008sqlserver.bak 2 ...

    hibernate-search, Hibernate Search.zip

    hibernate-search, Hibernate Search Hibernate 搜索版本:5.8.0. Final - 13-09-2017描述针对Java对象的全文搜索这个项目提供 Hibernate ORM和全文索引服务( 如 Apache Lucene和 Elasticsearch

    hibernate-search-5.5.4 api docset for Dash

    Hibernate Search 是一个强大的全文搜索引擎框架,它将Apache Lucene库集成到Hibernate ORM中,使得在Java应用程序中实现复杂的全文检索和分析功能变得简单。这个"hibernate-search-5.5.4 api docset for Dash"是...

    hibernate-testjar包

    hibernate

    基于hibernate search的全文搜索引擎实现完整代码和配置文件,支持中英文

    本资源提供了基于Hibernate Search实现的全文搜索引擎的完整代码和配置文件,适用于处理中英文数据,具备拼音搜索、错误纠正和搜索建议等高级功能。 Hibernate Search是Hibernate ORM的一个扩展,它允许开发者在...

    hibernate search-3.4.0.Final-dist

    这个3.4.0.Final版本是Hibernate Search历史上的一个重要里程碑,它在功能、性能和稳定性上都达到了一个全新的高度。 Hibernate Search的核心是Lucene,一个著名的全文搜索引擎库。通过集成Lucene,Hibernate ...

    hibernate search源码

    本篇文章将深入探讨Hibernate Search的源码,帮助你理解其工作原理,并提供研究和学习的指导。 **1. 概述** Hibernate Search的核心功能是通过Apache Lucene库实现的全文检索。它允许开发者对持久化的实体对象进行...

Global site tag (gtag.js) - Google Analytics