`

集成Hibernate Search做全文检索

 
阅读更多

集成Hibernate Search做全文检索 原文来自 http://blog.csdn.net/zhengwei223/article/details/11952763

 

版本及依赖:

 

[html] view plaincopy
 
  1. <dependency>  
  2.             <groupId>org.hibernate</groupId>  
  3.             <artifactId>hibernate-search-orm</artifactId>  
  4.             <version>4.2.0.Final</version>  
  5.         </dependency>  
[html] view plaincopy
 
  1. <dependency>  
  2. <span style="white-space:pre">          </span><groupId>org.apache.lucene</groupId>  
  3. <span style="white-space:pre">          </span><artifactId>lucene-smartcn</artifactId>  
  4. <span style="white-space:pre">          </span><version>3.6.2</version>  
  5. <span style="white-space:pre">      </span></dependency>  



 

1、修改hibernate主配置文件,增加:

 

[java] view plaincopy
 
  1. <property name="hibernate.search.default.directory_provider">  
  2.             org.hibernate.search.store.impl.FSDirectoryProvider  
  3.         </property>  
  4.         <property name="hibernate.search.default.indexBase">  
  5.             e:\luceneLinde  
  6.         </property>  


一个是存储的实现,一个是存储的路径

 

 

2、给实体类上注解

 

[java] view plaincopy
 
  1. import javax.persistence.*;  
  2.   
  3. import org.hibernate.annotations.GenericGenerator;  
  4.   
  5. import org.hibernate.search.annotations.DocumentId;  
  6. import org.hibernate.search.annotations.Field;  
  7. import org.hibernate.search.annotations.Indexed;  
  8. import org.hibernate.search.annotations.IndexedEmbedded;  
  9. import org.hibernate.search.annotations.Store;  
  10.   
  11.   
  12. @Entity  
  13. @Table(name = "PAGEINFO")  
  14. @Indexed(index="PageInfo")/*标记该表可索引,参数index指定存放索引信息的文件名,路径在主配置文件中指定*/  
[java] view plaincopy
 
  1. @Analyzer(impl=SmartChineseAnalyzer.class)//分词器  
  2. public class Pageinfo implements java.io.Serializable {  
  3.     private static final long serialVersionUID = 5454155825314635342L;  
  4.   
  5.   
  6.           
  7.     // columns START  
  8. //省略1000字  
  9.     // columns END  
  10.   
  11.     @Id  
  12.     @GeneratedValue(generator = "custom-id")  
  13.     @GenericGenerator(name = "custom-id", strategy = "uuid")  
  14.     @Column(name = "ID", unique = true, nullable = false, insertable = true, updatable = true, length = 32)  
  15.     @DocumentId  /*以字段id作为文档id*/  
  16.     public java.lang.String getId() {  
  17.         return this.id;  
  18.     }  
  19.   
  20.     @Column(name = "TITLE", unique = false, nullable = true, insertable = true, updatable = true, length = 255)  
  21.     @Field(store=Store.NO)  /*可索引,但不存储*/  
  22.     public java.lang.String getTitle() {  
  23.         return this.title;  
  24.     }  
  25.   
  26.     @Column(name = "CONTENT", unique = false, nullable = true, insertable = true, updatable = true)  
  27.     @Field(store=Store.NO)  
  28.     public java.lang.String getContent() {  
  29.         return this.content;  
  30.     }  
  31.   
  32.     @Column(name = "SOURCE", unique = false, nullable = true, insertable = true, updatable = true)  
  33.     @Field(store=Store.NO)  
  34.     public java.lang.String getSource() {  
  35.         return this.source;  
  36.     }  
  37.   
  38.   
  39.     @Column(name = "SUMMARY", unique = false, nullable = true, insertable = true, updatable = true)  
  40.     @Field(store=Store.NO)  
  41.     public java.lang.String getSummary() {  
  42.         return this.summary;  
  43.     }  
  44.   
  45.   
  46.     @ManyToOne(cascade = {}, fetch = FetchType.LAZY)  
  47.     @JoinColumns({ @JoinColumn(name = "SITE_ID", nullable = false, insertable = false, updatable = false) })  
  48.     @IndexedEmbedded(prefix="site_",depth=1)  /*关联检索,如field为site_name实则是按关联表的那么属性检索*/  
  49.     public GrabageSiteconfig getGrabageSiteconfig() {  
  50.         return grabageSiteconfig;  
  51.     }  
  52.   
  53. }  


省略了大量东西,如域成员,set方法等,一般以id作为doc的id,其他的你想对哪些字段做全文检索,就使用@Field标记,至于其store属性和lucene中的含义一致,不赘述。

 

 

3、使用API

 

[java] view plaincopy
 
  1. package othertest;  
  2.   
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5.   
  6. import javacommon.gather.bean.Pageinfo;  
  7.   
  8. import org.apache.lucene.analysis.standard.StandardAnalyzer;  
  9. import org.apache.lucene.queryParser.ParseException;  
  10. import org.apache.lucene.queryParser.QueryParser;  
  11. import org.apache.lucene.search.Query;  
  12. import org.apache.lucene.util.Version;  
  13. import org.hibernate.Session;  
  14. import org.hibernate.SessionFactory;  
  15. import org.hibernate.Transaction;  
  16. import org.hibernate.search.FullTextQuery;  
  17. import org.hibernate.search.FullTextSession;  
  18. import org.hibernate.search.Search;  
  19. import org.junit.Before;  
  20. import org.junit.BeforeClass;  
  21. import org.junit.Test;  
  22.   
  23. public class SearchTest {  
  24.     private static SessionFactory sf;  
  25.       
  26.     @BeforeClass  
  27.     public static void init() {  
  28.         sf = HibernateConfigTest.sf;//弄一个SessionFactory,不多说  
  29.           
  30.     }  
  31.     @Before  
  32.     //执行索引  
  33.     public void index(){  
  34.         Session session = sf.openSession();  
  35.         FullTextSession fullTextSession = Search.getFullTextSession(session);  
  36.         //查出结果  
  37.         List<Pageinfo> pageinfos = session.createCriteria(Pageinfo.class).list();  
  38.         session.beginTransaction();  
  39.         //依次建立索引  
  40.         for (Iterator iterator = pageinfos.iterator(); iterator.hasNext();) {  
  41.             Pageinfo pageinfo = (Pageinfo) iterator.next();  
  42.             fullTextSession.index(pageinfo);  
  43.         }  
  44.         session.getTransaction().commit();  
  45.         session.close();  
  46.         System.out.println("index over......");  
  47.     }  
  48.   
  49.     @Test  
  50.     public void searchTest() {  
  51.         Session session = sf.openSession();  
  52.         FullTextSession fullTextSession = Search.getFullTextSession(session);  
  53.         //在字段content中检索  
  54.         QueryParser queryParser = new QueryParser(Version.LUCENE_36, "content"new SmartChineseAnalyzer(Version.LUCENE_36));  
  55.         Query luceneqQuery=null;  
  56.         try {  
  57.             //检索含有“大风”的信息  
  58.             luceneqQuery = queryParser.parse("大风");  
  59.         } catch (ParseException e) {  
  60.             e.printStackTrace();  
  61.         }  
  62.         //执行检索,得到结果集  
  63.         FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneqQuery, Pageinfo.class);  
  64.         List<Pageinfo> pageinfos = fullTextQuery.list();  
  65.         //查看结果做验证  
  66.         for (Iterator iterator = pageinfos.iterator(); iterator.hasNext();) {  
  67.             Pageinfo pageinfo = (Pageinfo) iterator.next();  
  68.             System.out.println(pageinfo.getContent());  
  69.         }  
  70.     }  
  71. }  
分享到:
评论

相关推荐

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

    3. **Hibernate Search**:作为Hibernate的一个扩展,Hibernate Search提供了基于Lucene的全文检索功能,使得在数据库中的数据可以被快速、精确地搜索。 **二、集成Hibernate Search** 1. **配置依赖**:首先,你...

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

    **使用Hibernate Search实现全文检索及文档管理** 在Java开发中,全文检索和文档管理是常见的需求,特别是对于大型的企业级应用。Hibernate Search是Hibernate ORM框架的一个扩展,它提供了对数据库中的对象进行...

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

    Hibernate Search是Hibernate ORM的一个扩展,它允许开发者在Java应用中实现全文搜索功能,无缝集成到持久化层。该技术的核心是Lucene,一个高性能、全文本搜索库,提供了丰富的搜索功能和灵活性。 首先,让我们...

    hibernate Search in action

    读者将学会如何在项目中集成Hibernate Search,避免常见的陷阱,并了解如何持续改进搜索体验。 总之,《Hibernate Search in Action》是一本全面覆盖Hibernate Search的指南,无论是初学者还是经验丰富的开发者,都...

    Hibernate Search In Action

    Hibernate Search库将全文搜索与Hibernate持久化框架紧密结合,为Java开发者提供了方便的方式来集成全文搜索功能,而无需深入学习底层搜索引擎的复杂性。 Hibernate Search的一个显著优势是它能够自动化管理索引与...

    hibernateSearch+demo

    Hibernate Search 是一个基于 Hibernate ORM 的全文搜索引擎集成,它允许你在 Java 应用程序中轻松地实现复杂的全文检索功能。这个“hibernateSearch+demo”项目提供了一个实战示例,帮助开发者理解并应用 Hibernate...

    Hibernate搜索框架HibernateSearch.zip

    它是hibernate对著名的全文检索系统Lucene的一个集成方案,作用在于对数据表中某些内容庞大的字段(如声明为text的字段)建立全文索引,这样通过hibernate search就可以对这些字段进行全文检索后获得相应的POJO,...

    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 Search in action (pdf && code)

    Hibernate Search是Hibernate ORM的一个扩展,它将全文搜索的功能集成到Java应用中,使得在大量数据中进行高效、精准的检索成为可能。 本书首先会介绍Hibernate Search的基本概念,包括什么是全文搜索引擎、如何与...

    Hibernate Search in Action

    3. 集成Hibernate Search:将Hibernate Search集成到Java应用中,开发者可以通过注解实体类和字段,使它们参与全文索引。这使得数据库中的数据能够被快速检索,同时保持与ORM层的一致性。 4. 实体和字段的索引:在...

    hibernate search4.2

    Hibernate Search 4.2 是一个强大的搜索引擎集成解决方案,简化了 Java 应用程序中的全文检索实现。尽管现在已经有更新的版本,但 4.2 版本仍能满足许多项目需求,尤其对于那些不需要最新特性的稳定项目。理解和熟练...

    hibernate search-3.4.0.Final-dist

    通过集成Lucene,Hibernate Search使得开发者能够在数据库中的对象模型上执行复杂的全文搜索,而无需直接与Lucene交互。这意味着开发者可以利用熟悉的Hibernate API来处理搜索操作,大大降低了学习成本。 在3.4.0....

    hibernate_search.pdf

    标题:hibernate_search.pdf 描述与标签:此文档详细介绍了...通过上述知识点,读者可以全面了解Hibernate Search的功能、架构、配置和使用技巧,从而在实际项目中有效应用全文搜索技术,提升数据检索的准确性和效率。

    hibernate-search-5.6.0.Alpha3-dist.zip

    Hibernate Search,作为Java领域中的一款强大、高效的全文搜索引擎,与ORM框架Hibernate紧密结合,为开发者提供了在数据库中进行复杂检索的能力。这次我们关注的是其5.6.0.Alpha3版本的发行包,它包含了对现有功能的...

    hibernate-search-4.3.0.zip

    Hibernate Search是Java领域中一个强大的全文搜索引擎,它将Apache Lucene的功能与Hibernate ORM框架相结合,为Java应用程序提供了便捷的、高性能的全文检索功能。在本文中,我们将深入探讨Hibernate Search 4.3.0...

Global site tag (gtag.js) - Google Analytics