集成Hibernate Search做全文检索 原文来自 http://blog.csdn.net/zhengwei223/article/details/11952763
版本及依赖:
- <dependency>
- <groupId>org.hibernate</groupId>
- <artifactId>hibernate-search-orm</artifactId>
- <version>4.2.0.Final</version>
- </dependency>
- <dependency>
- <span style="white-space:pre"> </span><groupId>org.apache.lucene</groupId>
- <span style="white-space:pre"> </span><artifactId>lucene-smartcn</artifactId>
- <span style="white-space:pre"> </span><version>3.6.2</version>
- <span style="white-space:pre"> </span></dependency>
1、修改hibernate主配置文件,增加:
- <property name="hibernate.search.default.directory_provider">
- org.hibernate.search.store.impl.FSDirectoryProvider
- </property>
- <property name="hibernate.search.default.indexBase">
- e:\luceneLinde
- </property>
一个是存储的实现,一个是存储的路径
2、给实体类上注解
- import javax.persistence.*;
- import org.hibernate.annotations.GenericGenerator;
- import org.hibernate.search.annotations.DocumentId;
- import org.hibernate.search.annotations.Field;
- import org.hibernate.search.annotations.Indexed;
- import org.hibernate.search.annotations.IndexedEmbedded;
- import org.hibernate.search.annotations.Store;
- @Entity
- @Table(name = "PAGEINFO")
- @Indexed(index="PageInfo")/*标记该表可索引,参数index指定存放索引信息的文件名,路径在主配置文件中指定*/
- @Analyzer(impl=SmartChineseAnalyzer.class)//分词器
- public class Pageinfo implements java.io.Serializable {
- private static final long serialVersionUID = 5454155825314635342L;
- // columns START
- //省略1000字
- // columns END
- @Id
- @GeneratedValue(generator = "custom-id")
- @GenericGenerator(name = "custom-id", strategy = "uuid")
- @Column(name = "ID", unique = true, nullable = false, insertable = true, updatable = true, length = 32)
- @DocumentId /*以字段id作为文档id*/
- public java.lang.String getId() {
- return this.id;
- }
- @Column(name = "TITLE", unique = false, nullable = true, insertable = true, updatable = true, length = 255)
- @Field(store=Store.NO) /*可索引,但不存储*/
- public java.lang.String getTitle() {
- return this.title;
- }
- @Column(name = "CONTENT", unique = false, nullable = true, insertable = true, updatable = true)
- @Field(store=Store.NO)
- public java.lang.String getContent() {
- return this.content;
- }
- @Column(name = "SOURCE", unique = false, nullable = true, insertable = true, updatable = true)
- @Field(store=Store.NO)
- public java.lang.String getSource() {
- return this.source;
- }
- @Column(name = "SUMMARY", unique = false, nullable = true, insertable = true, updatable = true)
- @Field(store=Store.NO)
- public java.lang.String getSummary() {
- return this.summary;
- }
- @ManyToOne(cascade = {}, fetch = FetchType.LAZY)
- @JoinColumns({ @JoinColumn(name = "SITE_ID", nullable = false, insertable = false, updatable = false) })
- @IndexedEmbedded(prefix="site_",depth=1) /*关联检索,如field为site_name实则是按关联表的那么属性检索*/
- public GrabageSiteconfig getGrabageSiteconfig() {
- return grabageSiteconfig;
- }
- }
省略了大量东西,如域成员,set方法等,一般以id作为doc的id,其他的你想对哪些字段做全文检索,就使用@Field标记,至于其store属性和lucene中的含义一致,不赘述。
3、使用API
- package othertest;
- import java.util.Iterator;
- import java.util.List;
- import javacommon.gather.bean.Pageinfo;
- import org.apache.lucene.analysis.standard.StandardAnalyzer;
- import org.apache.lucene.queryParser.ParseException;
- import org.apache.lucene.queryParser.QueryParser;
- import org.apache.lucene.search.Query;
- import org.apache.lucene.util.Version;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.search.FullTextQuery;
- import org.hibernate.search.FullTextSession;
- import org.hibernate.search.Search;
- import org.junit.Before;
- import org.junit.BeforeClass;
- import org.junit.Test;
- public class SearchTest {
- private static SessionFactory sf;
- @BeforeClass
- public static void init() {
- sf = HibernateConfigTest.sf;//弄一个SessionFactory,不多说
- }
- @Before
- //执行索引
- public void index(){
- Session session = sf.openSession();
- FullTextSession fullTextSession = Search.getFullTextSession(session);
- //查出结果
- List<Pageinfo> pageinfos = session.createCriteria(Pageinfo.class).list();
- session.beginTransaction();
- //依次建立索引
- for (Iterator iterator = pageinfos.iterator(); iterator.hasNext();) {
- Pageinfo pageinfo = (Pageinfo) iterator.next();
- fullTextSession.index(pageinfo);
- }
- session.getTransaction().commit();
- session.close();
- System.out.println("index over......");
- }
- @Test
- public void searchTest() {
- Session session = sf.openSession();
- FullTextSession fullTextSession = Search.getFullTextSession(session);
- //在字段content中检索
- QueryParser queryParser = new QueryParser(Version.LUCENE_36, "content", new SmartChineseAnalyzer(Version.LUCENE_36));
- Query luceneqQuery=null;
- try {
- //检索含有“大风”的信息
- luceneqQuery = queryParser.parse("大风");
- } catch (ParseException e) {
- e.printStackTrace();
- }
- //执行检索,得到结果集
- FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneqQuery, Pageinfo.class);
- List<Pageinfo> pageinfos = fullTextQuery.list();
- //查看结果做验证
- for (Iterator iterator = pageinfos.iterator(); iterator.hasNext();) {
- Pageinfo pageinfo = (Pageinfo) iterator.next();
- System.out.println(pageinfo.getContent());
- }
- }
- }
相关推荐
3. **Hibernate Search**:作为Hibernate的一个扩展,Hibernate Search提供了基于Lucene的全文检索功能,使得在数据库中的数据可以被快速、精确地搜索。 **二、集成Hibernate Search** 1. **配置依赖**:首先,你...
**使用Hibernate Search实现全文检索及文档管理** 在Java开发中,全文检索和文档管理是常见的需求,特别是对于大型的企业级应用。Hibernate Search是Hibernate ORM框架的一个扩展,它提供了对数据库中的对象进行...
Hibernate Search是Hibernate ORM的一个扩展,它允许开发者在Java应用中实现全文搜索功能,无缝集成到持久化层。该技术的核心是Lucene,一个高性能、全文本搜索库,提供了丰富的搜索功能和灵活性。 首先,让我们...
读者将学会如何在项目中集成Hibernate Search,避免常见的陷阱,并了解如何持续改进搜索体验。 总之,《Hibernate Search in Action》是一本全面覆盖Hibernate Search的指南,无论是初学者还是经验丰富的开发者,都...
Hibernate Search库将全文搜索与Hibernate持久化框架紧密结合,为Java开发者提供了方便的方式来集成全文搜索功能,而无需深入学习底层搜索引擎的复杂性。 Hibernate Search的一个显著优势是它能够自动化管理索引与...
Hibernate Search 是一个基于 Hibernate ORM 的全文搜索引擎集成,它允许你在 Java 应用程序中轻松地实现复杂的全文检索功能。这个“hibernateSearch+demo”项目提供了一个实战示例,帮助开发者理解并应用 Hibernate...
它是hibernate对著名的全文检索系统Lucene的一个集成方案,作用在于对数据表中某些内容庞大的字段(如声明为text的字段)建立全文索引,这样通过hibernate search就可以对这些字段进行全文检索后获得相应的POJO,...
Hibernate Search 是一个强大的全文搜索引擎框架,它将Apache Lucene库集成到Hibernate ORM中,使得在Java应用程序中实现复杂的全文检索和分析功能变得简单。这个"hibernate-search-5.5.4 api docset for Dash"是...
Hibernate Search是Hibernate ORM的一个扩展,它将全文搜索的功能集成到Java应用中,使得在大量数据中进行高效、精准的检索成为可能。 本书首先会介绍Hibernate Search的基本概念,包括什么是全文搜索引擎、如何与...
3. 集成Hibernate Search:将Hibernate Search集成到Java应用中,开发者可以通过注解实体类和字段,使它们参与全文索引。这使得数据库中的数据能够被快速检索,同时保持与ORM层的一致性。 4. 实体和字段的索引:在...
Hibernate Search 4.2 是一个强大的搜索引擎集成解决方案,简化了 Java 应用程序中的全文检索实现。尽管现在已经有更新的版本,但 4.2 版本仍能满足许多项目需求,尤其对于那些不需要最新特性的稳定项目。理解和熟练...
通过集成Lucene,Hibernate Search使得开发者能够在数据库中的对象模型上执行复杂的全文搜索,而无需直接与Lucene交互。这意味着开发者可以利用熟悉的Hibernate API来处理搜索操作,大大降低了学习成本。 在3.4.0....
标题:hibernate_search.pdf 描述与标签:此文档详细介绍了...通过上述知识点,读者可以全面了解Hibernate Search的功能、架构、配置和使用技巧,从而在实际项目中有效应用全文搜索技术,提升数据检索的准确性和效率。
Hibernate Search,作为Java领域中的一款强大、高效的全文搜索引擎,与ORM框架Hibernate紧密结合,为开发者提供了在数据库中进行复杂检索的能力。这次我们关注的是其5.6.0.Alpha3版本的发行包,它包含了对现有功能的...
Hibernate Search是Java领域中一个强大的全文搜索引擎,它将Apache Lucene的功能与Hibernate ORM框架相结合,为Java应用程序提供了便捷的、高性能的全文检索功能。在本文中,我们将深入探讨Hibernate Search 4.3.0...