`
solomongg
  • 浏览: 53039 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

spring+hibernate+compass

阅读更多

    首先是spring与compass的集成配置文件:applicationContext-compass.xml

Xml代码  收藏代码
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < beans   xmlns = "http://www.springframework.org/schema/beans"   
  3.     xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"   
  4.     xmlns:context = "http://www.springframework.org/schema/context"   
  5.     xsi:schemaLocation ="http://www.springframework.org/schema/beans   
  6.                 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"  
  7.         default-lazy-init = "true" >       
  8.       
  9.     <!-- 配置compass注解 -->   
  10.     < bean   id = "annotationConfiguration"   class = "org.compass.annotations.config.CompassAnnotationsConfiguration" >   
  11.     </ bean >   
  12.     <!-- 配置compass bean -->   
  13.     < bean   id = "compass"   class = "org.compass.spring.LocalCompassBean" >   
  14.         <!-- 定义索引存放路径 -->   
  15.         < property   name = "connection" >   
  16.           < value > file://${index.path} </ value >   
  17.         </ property >   
  18.         <!-- 配置需要创建索引的实体 -->   
  19.         < property   name = "classMappings" >   
  20.           < list >           
  21.              < value > com.***.mobile.entity.KnowledgeInfo </ value >   
  22.              < value > com.***.mobile.entity.ChannelInfo </ value >   
  23.              < value > com.***.mobile.entity.MobileBaseEntity </ value >   
  24.              < value > com.***.mobile.entity.BaseEntity </ value >   
  25.              < value > com.***.mobile.entity.BusLine </ value >   
  26.           </ list >   
  27.         </ property >   
  28.         < property   name = "compassConfiguration"   ref = "annotationConfiguration" > </ property >   
  29.         < property   name = "compassSettings" >   
  30.          < props >   
  31.           <!-- compass事务工厂 -->   
  32.           < prop   key = "compass.transaction.factory" > org.compass.spring.transaction.SpringSyncTransactionFactory </ prop >   
  33.           <!-- paoding分词器 -->   
  34.           < prop   key = "compass.engine.analyzer.MMAnalyzer.CustomAnalyzer" > net.paoding.analysis.analyzer.PaodingAnalyzer </ prop >   
  35.           <!-- 设置高亮显示 -->   
  36.           < prop   key = "compass.engine.highlighter.default.formatter.simple.pre" > <![CDATA[<font color="#cc0033"><b>]]> </ prop >    
  37.           < prop   key = "compass.engine.highlighter.default.formatter.simple.post" > <![CDATA[</b></font>]]> </ prop >              
  38.          </ props >   
  39.         </ property >   
  40.         < property   name = "transactionManager"   ref = "transactionManager"   />   
  41.     </ bean >   
  42.     <!-- 用Hibernate3事件系统,支持Real Time Data Mirroring.经Hiberante改变的数据会自动被反射到索引里面 -->   
  43.     < bean   id = "hibernateGpsDevice"   class = "org.compass.gps.device.hibernate.dep.Hibernate3GpsDevice" >   
  44.             < property   name = "name" >   
  45.                     < value > hibernateDevice </ value >   
  46.             </ property >   
  47.             < property   name = "sessionFactory"   ref = "sessionFactory"   />   
  48.             < property   name = "mirrorDataChanges" >   
  49.                 < value > true </ value >   
  50.             </ property >   
  51.         </ bean >   
  52.      <!-- 同步更新索引 -->   
  53.      < bean   id = "compassGps"   class = "org.compass.gps.impl.SingleCompassGps"   init-method = "start"   destroy-method = "stop" >   
  54.     < property   name = "compass"   ref = "compass"   />   
  55.     < property   name = "gpsDevices" >   
  56.         < list >   
  57.             < bean   class = "org.compass.spring.device.hibernate.dep.SpringHibernate3GpsDevice" >   
  58.                 < property   name = "name"   value = "hibernateDevice" />   
  59.                 < property   name = "sessionFactory"   ref = "sessionFactory" />   
  60.             </ bean >   
  61.         </ list >   
  62.     </ property >   
  63.      </ bean >   
  64.      < bean   id = "compassTemplate"   class = "org.compass.core.CompassTemplate" >   
  65.         < property   name = "compass"   ref = "compass"   />   
  66.           
  67.      </ bean >   
  68. </ beans >   

 接着是实体的compass注解,将需要创建索引的实体及实体属性标注:

Java代码  收藏代码
  1. @Entity   
  2. @Table (name= "B_ENTITY_BASE" )  
  3. @Searchable   
  4. public   class  MobileBaseEntity  implements  Serializable {  
  5.   
  6.     private   static   final   long  serialVersionUID = -5594658438463757978L;  
  7.   
  8.     @SearchableId   
  9.     protected  String id;  
  10.     @SearchableProperty (name =  "keys" )  
  11.     protected  String name;  
  12.     @SearchableProperty (index = Index.NO, store = Store.YES)  
  13.     protected  String address;  
  14.     protected  String phone;  
  15.     protected  String description;  
  16.     @SearchableProperty (index = Index.NO, store = Store.YES)  
  17.     protected  Double longitude;  
  18.     @SearchableProperty (index = Index.NO, store = Store.YES)  
  19.     protected  Double latitude;  
  20.     @SearchableProperty (index = Index.NO, store = Store.YES)  
  21.     protected  String type;  
  22.     protected  String channel;  
  23.     protected  String knowledgeId;  
  24.     protected  String stauts; //0审核退回,1审核中,2正常   
  25. }  

@SearchableId:不要求定义搜索的元数据;

@SearchableProperty(name = "keys"):属性索引的别名,这个别名在做查询的时候会用到,我们可以把多个实体类的多个属性定义为同一个别名来做全文检索;

@SearchableProperty(index = Index.NO, store = Store.YES):保存这个属性的值,但不作为索引。index = Index.XXX,这个有几种策略,1: NOT_ANALYZED ,不分词但创建索引;2:ANALYZED,分词并创建索引。

@SearchableComponent:关联复合索引,用以复合类型;

@ SearchableReference:用以引用类型。

接下来就是使用compass的API来做数据查询,首先是模糊匹配查询,

Java代码  收藏代码
  1. List<BusLine> busLineList =  new  ArrayList<BusLine>();  
  2.         Compass compass = this .compassTemplate.getCompass();  
  3.         CompassSession compassSession = compass.openSession();  
  4.         CompassQueryBuilder queryBuilder = compassSession.queryBuilder();  
  5.                                 //指定查询实体   
  6.         CompassQuery queryAlias = queryBuilder.alias(BusLine.class .getSimpleName());  
  7.         CompassBooleanQueryBuilder boolQueryBuilder = queryBuilder.bool();  
  8.         boolQueryBuilder.addMust(queryAlias);  
  9.         boolQueryBuilder.addMust(queryBuilder.wildcard("baseEntityKeys" "*" +value+ "*" ));  
  10.         CompassHits compassHits = boolQueryBuilder.toQuery().hits();  
  11.         if (compassHits !=  null  && compassHits.length() >  0 ) {  
  12.             for ( int  i =  0 ; i < compassHits.length(); i++) {  
  13.                 BusLine line = (BusLine)compassHits.data(i);  
  14.                 busLineList.add(line);  
  15.             }  
  16.         }  
  17.         compassSession.close();  
  18.         return  busLineList;  

 至于是使用模糊匹配查询还是全文检索,这需要根据应用场景来选择,能使用模糊匹配的话尽量使用,全文检索的代价比模糊匹配要高。全文检索的例子:

Java代码  收藏代码
  1. String keywords = keyword.trim();  
  2. List<KnowledgeInfo> result = new  ArrayList<KnowledgeInfo>();  
  3. Properties prop = PropertyUtil.readPropertyFile();  
  4. String type = prop.getProperty("knowledge.zc.type" );  
  5. ChannelInfo channel = channelInfoService.getChannelById(type);  
  6. Compass compass = this .compassTemplate.getCompass();  
  7. CompassSession session = compass.openSession();  
  8. CompassQueryBuilder builder = session.queryBuilder();     
  9. CompassBooleanQueryBuilder boolBuidler = builder.bool();  
  10. boolBuidler.addMust(builder.wildcard("sort" , channel.getSort()+ "*" ));  
  11. if (keywords !=  null  && ! "" .equals(keywords)) {  
  12.     String[] array = keywords.split(" " );  
  13.     if  (array !=  null  && array.length >  0 ) {  
  14.         for  (String value : array) {  
  15.             if  (value !=  null  && StringUtils.isNotEmpty(value.trim())) {  
  16.     boolBuidler.addMust(builder.queryString("keys:"  + value).toQuery());  
  17.             }  
  18.         }  
  19.     }  
  20.     CompassHits hits = boolBuidler.toQuery().hits();  
  21.     if  (hits !=  null  && hits.length() >  0 ) {  
  22.         for  ( int  i =  0 ; i < hits.length(); i++) {  
  23.             KnowledgeInfo info = (KnowledgeInfo) hits.data(i);  
  24.             String ht = hits.highlighter(i).fragment("keys" );  
  25.             if  ( null  != ht) {  
  26.                 info.setKeywords(ht);  
  27.             }  
  28.             result.add(info);  
  29.         }  
  30.     }  
  31. }  
  32. session.close();  
  33. return  result;  

 compass一个简单的应用就完成了。

分享到:
评论

相关推荐

    spring + hibernate + struts2 + compass2.1

    标题 "spring + hibernate + struts2 + compass2.1" 暗示了这是一个关于构建基于Java的Web应用程序的经典组合。在这个框架中,Spring作为核心的依赖注入(DI)和面向切面编程(AOP)容器,Hibernate是用于对象关系...

    spring+hibernate+jpa+struts1+struts2+springmvc+jquery+freemaker 学习笔记 案例.rar

    spring+hibernate+jpa+struts1+struts2+springmvc+jquery+freemaker 学习笔记 Compass将lucene、Spring、Hibernate三者结合

    struts2+spring2.5+hibernate3.26+compass2.1搜索引擎简单实现(无jar包)

    Struts2、Spring、Hibernate和Compass是Java Web开发中常用的四大框架,它们各自负责不同的职责,协同工作可以构建高效、灵活的企业级应用。这里我们主要讨论如何将这些技术结合在一起,实现一个简单的搜索引擎功能...

    struts2+hibernate3+spring3+compass

    struts2+spring3+hibernate3+compass实现全文检索功能,希望对初学者有所帮助!

    Struts+Hibernate+spring+jpa+lucene+jbpm+compass配置文件

    Struts、Hibernate、Spring、JPA、Lucene、JBPM和Compass是Java开发中常用的一系列技术,它们各自在不同的领域发挥着重要作用。这里我们将深入探讨这些技术以及如何将它们整合在一起进行配置。 1. **Struts**:...

    JAVA 全文搜索 struts2+spring+hibernte+compass整合记录

    在本项目中,"JAVA 全文搜索 struts2+spring+hibernate+compass整合记录" 是一个关于如何在Java环境下集成四个关键组件来实现全文搜索引擎的实践教程。Struts2是一个流行的MVC框架,Spring是核心的依赖注入框架,...

    struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0产品搜索

    struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0 包含所有jar包,按readme.txt导入并运行即可 开始不用分了................

    compass-2.2.0+hibernate-3.2+struts-2.1.8.1+spring-framework-2.5.4

    标题 "compass-2.2.0+hibernate-3.2+struts-2.1.8.1+spring-framework-2.5.4" 指的是一个集成开发环境,它结合了四个关键的技术组件:Compass、Hibernate、Struts 2 和 Spring Framework,这些都是Java Web开发中的...

    基于Java+Hibernate Spring JPA Compass实现的图书商城项目源码.zip

    本项目是一个基于Java技术栈,整合了Hibernate、Spring JPA以及Compass的图书商城系统,提供了全面的功能,适合用于课程设计、大作业、毕业设计、项目练习或学习演示。下面将详细阐述该项目所涉及的技术点及其重要性...

    整合compass2.0 spring hibernate示例源程序

    标题 "整合compass2.0 spring hibernate示例源程序" 提供了我们即将探讨的核心内容,即一个结合了Compass 2.0、Spring和Hibernate的集成示例。这个项目旨在展示如何在Java应用程序中有效地利用这三个强大的开源框架...

    ssh+compass实现站内搜索分页.rar

    SSH(Struts2 + Spring + Hibernate)是一种经典的Java Web开发框架,用于构建高效、可扩展的企业级应用程序。Compass是一个基于Lucene的全文搜索引擎库,它简化了在Java应用中集成全文检索的功能。本教程将重点讲解...

    compass_hibernate_spring3.zip

    标题“compass_hibernate_spring3.zip”提示我们这个压缩包可能包含了关于 Compass、Hibernate 和 Spring 3 框架的整合教程或者示例代码。Compass 是一个全文搜索引擎库,它为 Java 应用提供了类似 Google 的搜索...

    COMPASS+spring构建自己的搜索引擎.pdf

    标题提及的"COMPASS+spring构建自己的搜索引擎"是关于如何使用Compass搜索引擎框架与Spring框架集成,构建一个自定义的全文搜索引擎。Compass是一个开源的搜索引擎库,它提供了与ORM框架(如Hibernate)的集成,使得...

    compass_hibernate_spring2.zip

    标题“compass_hibernate_spring2.zip”提示我们这个压缩包可能包含了关于 Compass、Hibernate 和 Spring 三者结合使用的示例或教程。Compass 是一个全文搜索引擎,Hibernate 是一个流行的 Java ORM(对象关系映射)...

    SSH+compass 整合

    本资源是struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0整合实例,可以为初学入门者,提供个参考,本人也是网上找的,感觉很不错(因其中所用的jar文件太大,无法上传,大家可以自己添加各框架...

    compass_hibernate_spring.zip

    《 Compass、Hibernate与Spring的整合应用详解 》 在现代企业级Java开发中,数据持久化是不可或缺的一部分,而Hibernate作为流行的ORM(对象关系映射)框架,极大地简化了数据库操作。然而,对于复杂的搜索需求,...

    struts2 hibernate spring compass全文检索

    Struts2、Hibernate、Spring 和 Compass 是Java Web开发中四个重要的框架和技术,它们共同构建了一个强大的企业级应用架构。在本项目中,开发者利用SSH2(即Struts2、Hibernate和Spring的组合)作为基础框架,并引入...

    S2SH+compass (实现站内全文检索)

    标题中的"S2SH+compass"指的是使用Struts2(S),Spring(S)和Hibernate(H)这三种开源框架的组合,再加上Compass搜索引擎库来实现一个网站内部的全文检索功能。这种组合常见于Java Web开发中,用于构建复杂、高...

    使用compass+lucene实现简单的全文检索功能.doc

    这个简单的示例展示了如何结合Compass和Lucene在Struts2+Spring2+Hibernate3环境中实现全文检索功能。通过这种方式,你可以轻松地在应用程序中添加强大的搜索功能,让用户能够快速找到他们需要的信息。随着需求的...

Global site tag (gtag.js) - Google Analytics