- 浏览: 102134 次
- 性别:
- 来自: 北海
最新评论
-
July01:
最近了解到一款StratoIO打印控件,功能如下:1、Html ...
IE下利用js实现打印功能 -
sunxiyuan111:
试了第三种方法 ,管用,解决了大问题谢谢
jasperreports导出pdf报表时粗体的显示问题 -
java爱好者92:
主子报表帆软报表官网上的攻略说得很详细,可以参考一下
利用iReport制作子报表 -
fengjianquan9527:
狗屁不通,毛用不管
jasperreports导出pdf报表时粗体的显示问题 -
xiegqooo:
codeloafer 写道现在activemq5.6 以上ne ...
ActiveMQ集群应用
前阵子在做一个手机服务器端系统的开发,主要使用spring+hibernate框架,由于系统涉及到全文检索功能,所以很自然地就想到了compass这个开源的搜索引擎,并且在j2ee领域,个人觉得目前最好用的就是这个了。为了提高系统的性能,我们大量的使用了compass创建的索引来做数据查询,因为我们主要功能是数据查询,很少做数据的更改,所以比较适合用这种方式,也收到了很好的效果。
首先是spring与compass的集成配置文件:applicationContext-compass.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd" default-lazy-init="true"> <!-- 配置compass注解 --> <bean id="annotationConfiguration" class="org.compass.annotations.config.CompassAnnotationsConfiguration"> </bean> <!-- 配置compass bean --> <bean id="compass" class="org.compass.spring.LocalCompassBean"> <!-- 定义索引存放路径 --> <property name="connection"> <value>file://${index.path}</value> </property> <!-- 配置需要创建索引的实体 --> <property name="classMappings"> <list> <value>com.***.mobile.entity.KnowledgeInfo</value> <value>com.***.mobile.entity.ChannelInfo</value> <value>com.***.mobile.entity.MobileBaseEntity</value> <value>com.***.mobile.entity.BaseEntity</value> <value>com.***.mobile.entity.BusLine</value> </list> </property> <property name="compassConfiguration" ref="annotationConfiguration"></property> <property name="compassSettings"> <props> <!-- compass事务工厂 --> <prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop> <!-- paoding分词器 --> <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer">net.paoding.analysis.analyzer.PaodingAnalyzer</prop> <!-- 设置高亮显示 --> <prop key="compass.engine.highlighter.default.formatter.simple.pre"><![CDATA[<font color="#cc0033"><b>]]></prop> <prop key="compass.engine.highlighter.default.formatter.simple.post"><![CDATA[</b></font>]]></prop> </props> </property> <property name="transactionManager" ref="transactionManager" /> </bean> <!-- 用Hibernate3事件系统,支持Real Time Data Mirroring.经Hiberante改变的数据会自动被反射到索引里面 --> <bean id="hibernateGpsDevice" class="org.compass.gps.device.hibernate.dep.Hibernate3GpsDevice"> <property name="name"> <value>hibernateDevice</value> </property> <property name="sessionFactory" ref="sessionFactory" /> <property name="mirrorDataChanges"> <value>true</value> </property> </bean> <!-- 同步更新索引 --> <bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop"> <property name="compass" ref="compass" /> <property name="gpsDevices"> <list> <bean class="org.compass.spring.device.hibernate.dep.SpringHibernate3GpsDevice"> <property name="name" value="hibernateDevice"/> <property name="sessionFactory" ref="sessionFactory"/> </bean> </list> </property> </bean> <bean id="compassTemplate" class="org.compass.core.CompassTemplate"> <property name="compass" ref="compass" /> </bean> </beans>
接着是实体的compass注解,将需要创建索引的实体及实体属性标注:
@Entity @Table(name="B_ENTITY_BASE") @Searchable public class MobileBaseEntity implements Serializable { private static final long serialVersionUID = -5594658438463757978L; @SearchableId protected String id; @SearchableProperty(name = "keys") protected String name; @SearchableProperty(index = Index.NO, store = Store.YES) protected String address; protected String phone; protected String description; @SearchableProperty(index = Index.NO, store = Store.YES) protected Double longitude; @SearchableProperty(index = Index.NO, store = Store.YES) protected Double latitude; @SearchableProperty(index = Index.NO, store = Store.YES) protected String type; protected String channel; protected String knowledgeId; protected String stauts;//0审核退回,1审核中,2正常 }
@SearchableId:不要求定义搜索的元数据;
@SearchableProperty(name = "keys"):属性索引的别名,这个别名在做查询的时候会用到,我们可以把多个实体类的多个属性定义为同一个别名来做全文检索;
@SearchableProperty(index = Index.NO, store = Store.YES):保存这个属性的值,但不作为索引。index = Index.XXX,这个有几种策略,1:NOT_ANALYZED ,不分词但创建索引;2:ANALYZED,分词并创建索引。
@SearchableComponent:关联复合索引,用以复合类型;
@SearchableReference:用以引用类型。
接下来就是使用compass的API来做数据查询,首先是模糊匹配查询,
List<BusLine> busLineList = new ArrayList<BusLine>(); Compass compass = this.compassTemplate.getCompass(); CompassSession compassSession = compass.openSession(); CompassQueryBuilder queryBuilder = compassSession.queryBuilder(); //指定查询实体 CompassQuery queryAlias = queryBuilder.alias(BusLine.class.getSimpleName()); CompassBooleanQueryBuilder boolQueryBuilder = queryBuilder.bool(); boolQueryBuilder.addMust(queryAlias); boolQueryBuilder.addMust(queryBuilder.wildcard("baseEntityKeys", "*"+value+"*")); CompassHits compassHits = boolQueryBuilder.toQuery().hits(); if(compassHits != null && compassHits.length() > 0) { for(int i = 0; i < compassHits.length(); i++) { BusLine line = (BusLine)compassHits.data(i); busLineList.add(line); } } compassSession.close(); return busLineList;
至于是使用模糊匹配查询还是全文检索,这需要根据应用场景来选择,能使用模糊匹配的话尽量使用,全文检索的代价比模糊匹配要高。全文检索的例子:
String keywords = keyword.trim(); List<KnowledgeInfo> result = new ArrayList<KnowledgeInfo>(); Properties prop = PropertyUtil.readPropertyFile(); String type = prop.getProperty("knowledge.zc.type"); ChannelInfo channel = channelInfoService.getChannelById(type); Compass compass = this.compassTemplate.getCompass(); CompassSession session = compass.openSession(); CompassQueryBuilder builder = session.queryBuilder(); CompassBooleanQueryBuilder boolBuidler = builder.bool(); boolBuidler.addMust(builder.wildcard("sort", channel.getSort()+"*")); if(keywords != null && !"".equals(keywords)) { String[] array = keywords.split(" "); if (array != null && array.length > 0) { for (String value : array) { if (value != null && StringUtils.isNotEmpty(value.trim())) { boolBuidler.addMust(builder.queryString("keys:" + value).toQuery()); } } } CompassHits hits = boolBuidler.toQuery().hits(); if (hits != null && hits.length() > 0) { for (int i = 0; i < hits.length(); i++) { KnowledgeInfo info = (KnowledgeInfo) hits.data(i); String ht = hits.highlighter(i).fragment("keys"); if (null != ht) { info.setKeywords(ht); } result.add(info); } } } session.close(); return result;
compass一个简单的应用就完成了。
发表评论
-
cas客户端应用实现
2011-12-20 15:51 6712cas服务器端的开发请参考: http://xiaomage ... -
cas+tomcat开发单点登录教程(定制认证方式篇)
2011-12-19 20:43 10366CAS 是 Yale 大学发起的 ... -
java开发webservice的几种方式
2011-12-17 15:33 10813webservice的应用已经越来 ... -
spring security 3.0 实现认证与授权
2011-07-10 20:11 2006先看一下spring security 官方对以下几个类或接口 ... -
EJB系统使用JMS异步发送邮件
2011-01-26 15:58 2094EJB中有三种Bean,EntityBean,SessionB ... -
jasperreports导出pdf报表时粗体的显示问题
2010-12-23 17:14 6563最近一直在做报表,用的是iReport3.7.3和jasper ... -
利用iReport制作子报表
2010-12-10 16:09 5793iReport版本:3.7.3,JavaBean作为数据源。1 ... -
解决GET提交中文乱码问题
2010-11-19 15:20 2660今天同事在做一个手机 ... -
IE下利用js实现打印功能
2010-10-29 11:08 3612这主要是用到了IE的一个内置插件,在html代码的<he ... -
struts2+jasperReport生成各种形式的报表
2010-10-28 17:10 2880/** * 導出html形式報表 * @param r ... -
利用js给select element产生年份
2010-10-25 16:32 2659function generateYearFun() { v ... -
解决struts2+jasperReport在生成html形式的报表时的图片问题
2010-10-18 14:09 3502Struts2和jasperReport整合时,在生成html ... -
struts2 java.lang.IllegalStateException异常的解决方法
2010-10-15 18:46 4930环境:eclipse+struts2+EJB3.0+jaspe ... -
Tomcat JVM调优有感
2010-09-25 22:42 2133最近在做一个社交类网 ... -
struts2+ajax做的一个级联下拉列表
2010-09-20 14:47 2667struts2+ajax做的一个级联下拉列表 struts端代 ... -
struts2+jsonplugin的问题
2010-09-15 00:16 1302[size=xx-small]今天做项目碰到了个问题,在做一个 ... -
关于embed标签的src属性
2010-09-05 16:47 1868前阵子做个项目,需要把用户上传的pdf文件转换为swf文件然后 ... -
ssh与jbpm4.3的整合
2010-05-28 20:23 1473首先说一下环境,spring3.0+struts2+hiber ...
相关推荐
Compass搜索引擎技术是一种基于Lucene的全文检索框架,它提供了更高级别的API和集成机制,使得在Java应用程序中实现搜索引擎功能变得更加便捷。Compass的主要目标是将全文索引能力无缝地融入到现有的业务应用程序中...
Compass是一个基于Lucene的高级搜索引擎框架,它为Java开发者提供了一种更加便捷的方式来构建和管理搜索引擎应用。 **一、Compass概述** Compass是一个开源项目,它将Lucene的功能封装起来,提供了一套面向对象的...
Compass对象搜索引擎是一款基于Lucene的全文搜索引擎框架,它为Java开发者提供了高级的搜索功能,使得在应用程序中集成全文检索变得更加便捷。Compass的核心理念是将数据库中的对象与Lucene索引之间建立映射...
【SSH+Compass搜索引擎简单项目】是一个基于Struts2(S),Hibernate(H)和Spring(S)的Java Web应用程序,结合了Compass搜索引擎库,用于实现对数据库中两个表的高效检索功能。这个项目旨在提供一个清晰易懂的...
Compass全文检索是一个强大的搜索引擎库,它为Java应用程序提供了便捷的全文索引和搜索功能。在本实例中,我们有一个可直接运行的Compass全文检索系统,已经集成了SSH(Struts、Spring、Hibernate)框架,这是一个...
Compass是一款基于Lucene的全文搜索引擎,它使得Java应用能够方便地集成全文搜索功能。Compass提供了对JDBC、Hibernate等数据源的直接支持,可以自动索引数据库中的数据,实现快速检索。 在"struts2+spring2.5+...
标题提及的"COMPASS+spring构建自己的搜索引擎"是关于如何使用Compass搜索引擎框架与Spring框架集成,构建一个自定义的全文搜索引擎。Compass是一个开源的搜索引擎库,它提供了与ORM框架(如Hibernate)的集成,使得...
标题 "Spring ,JPA,Compass使用注解开发的博客站内搜索" 涉及的是在Java开发环境中,利用Spring框架、Java Persistence API (JPA) 和 Compass搜索引擎来实现一个博客系统的站内搜索功能。这是一项关键的技术,因为...
Compass是一款基于Apache Lucene的全文搜索引擎框架,它为开发者提供了更高级别的抽象层,简化了搜索引擎的集成工作。在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 全文检索是相对于传统的基于...
【compass完整可用项目】是一个基于特定技术栈的软件开发项目,该项目的核心是Compass库,一个与Lucene紧密集成的全文搜索引擎工具。Compass提供了一种简单的方式来在Java应用程序中集成全文搜索功能,使得开发者...
Compass全文搜索是一个基于Apache Lucene的高性能、易用的全文搜索引擎工具。Lucene是Java开发的开源库,它提供了文本分析、索引和搜索的基本功能。而Compass则在Lucene的基础上进行了封装,使得开发者可以更方便地...
Compass 是一个全文搜索引擎库,它是对 Lucene 的封装,为 Java 应用提供了一种简单易用的接口。在 Compass 中,Annotation 是一种元数据注解方式,它允许开发者在对象模型上直接定义搜索映射,使得对象与索引之间的...
在Java应用中集成搜索引擎功能时,Compass提供了一种简化的方式来管理和操作Lucene索引。通过Compass,你可以将对象-关系映射(ORM)与全文检索完美结合,使得数据库中的数据能够被快速高效地搜索。 **Compass的...
Compass 是一个基于 Lucene 的全文检索框架,它提供了一种高级的、面向对象的方式来管理和集成搜索引擎到你的应用程序中。在“compass2.1.4包”中,包含了 Compass 框架的版本 2.1.4,这个版本可能包含了性能优化、...
Compass是一个高性能的开源Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它不仅利用了顶级的Lucene搜索引擎的强大功能,还融合了诸如Hibernate和Spring等流行框架的优势,从而为开发者提供了一个...
通过使用Compass 2.2.0,开发者可以在Java应用中轻松集成搜索引擎功能,提升用户体验,同时减少维护成本。在实际项目中,我们可以根据需求选择合适的Compass配置,结合其提供的工具和API,实现高效的全文搜索、数据...
Compass是一个高级开源的Java搜索引擎框架,旨在简化应用程序与搜索引擎之间的集成过程。它通过结合强大的Lucene搜索引擎以及流行的应用框架如Hibernate和Spring,使得开发者能够轻松地将搜索功能融入到Java应用程序...
Compass作为Lucene的一个高级封装,简化了在应用程序中集成搜索引擎的操作;而Ajax(Asynchronous JavaScript and XML)则通过异步通信提升了用户体验。本文将围绕这三个技术展开深入的探讨。 首先,我们来了解...