如果你的网站架构采用的是spring+hibernate。用现在比较流行的开源搜索引擎框架compass可以快速的给你的网站添加强大的搜索功能。从几十万条数据中,只需几毫秒的时间就可以搜索出你想要的数据。
我现在只讲快速的把搜索功能构建到你的系统中。至于配置的细节,可能点到为止。望能够原谅。让我们开始吧。
第一步:为你要搜索的表建立索引。我们不是通过关系数据库中的表直接建立索引的。而是借助于已通过hibernate这个中间桥梁而间接的给库表建立索引。我们知道hibernate主要完成对象到库表的映射。而我们是在对象的基础上建立索引的。假如我们的库表有一个叫video(影视表)的表。有字段,id(主键,唯一编号,递增),c_name(中文名),e_name(英文名),alias(别名),genre(类型),director(导演),create_time,update_time....这个表应该对应一个对象,也就是我们常说的pojo.
Video.java
上面这个简单的pojo没什么可讲的,大家一看就很熟悉了。
接下来我们要针对这个pojo建立索引,也就是建立一个cpm文件。具体配置如下:
简单的配置文件讲解一下,这个文件的package属性是指导pojo(Video.java)所在的包。<class name="Video" alias="video"
index="video-index"> .name就是类名了。alias就是给这个类在起一个别名。index是指生成索引所在的文件夹的名字。后面你就会明白的。
<property name="CName">
<meta-data index="tokenized">CName</meta-data>
</property>
这个标签中的name就是Video.java中的那些属性名。<meta-data index="tokenized">这个属性指明了,该字段索引的策略,index有三个值,默认是tokenized表示先分词在索引,no表示既不分词也不索引,un_tokenized表示不分词但索引。其中还有一个属性store表示是否存储,它有两个值, yes/no.默认就是yes.表示对该字段存储。这是常用到的两个属性,其他还有很多,但是不是常用的。这两个就够了。至于其他的属性我们一般不再这里配置,一般在另外一个配置文件中统一配置。每个cpm文件都可以用到的。
第二步:配置compass文件。
在这里我并没有配置compass.cfg.xml这个文件。我把它里面该配置的都统一配置到了上面那个文件里了。
在上一篇文章中主要讲了,配置要索引的表和compass与spring整合时的配置。接下来我把余下的两部分写出来。
第三步:配置手动创建索引的功能。
这个其实只需在第一次生成索引的时候用,当系统正常运行时,compass中的hibernateGps会自动检测数据的变动,同时同步索引文件的。
首先在applicationContext.xml中配置bean.
<!-- 手工生成索引 -->
<bean id="buildIndexController"
class="org.compass.spring.web.mvc.CompassIndexController">
<property name="compassGps" ref="hibernateGps" />
<property name="indexView" value="/ftl/create.ftl" />
<property name="indexResultsView" value="/ftl/create.ftl" />
</bean>
同时我们也要配置与之相应的请求映射。
<bean id="urlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/buildindex.htm">buildIndexController</prop>
</props>
</property>
</bean>
最后就是自动生成索引的页面了,这里我用的是freemarker.用什么都一样,你可以用jsp,html.
create.ftl(在WebRoot下的ftl文件夹下)
<html>
<head>
<title>builderIndex</title>
</head>
<body>
<h1>
手工重建索引
</h1>
<p>
<form name="keyword" action="/buildindex.htm" method="post">
<INPUT type="hidden" name="doIndex" value="true">
<input type="submit" value="手工重建索引" />
</form>
<#if indexResults?exists>
本次索引耗时${indexResults.indexTime}毫秒!
</#if>
<p>
</body>
</html>
当我们点击手工重建索引按钮时,会在我们指定的索引目录下<prop key="compass.engine.connection">E:/video</prop>也就先在E:/video下生成gpsindex/video-index当索引生成完以后,会返回生成索引所用的毫秒数。这时就会把gpsindex文件夹下的video-index覆盖到E:/video/index/下的video-index文件夹。这时gpsindex/video-index也消失了。这就是简单的生成索引的过程。接下来我们要说最后一步了。索引我们已建好了,怎么去搜索我们想要的数据了。
我现在只讲快速的把搜索功能构建到你的系统中。至于配置的细节,可能点到为止。望能够原谅。让我们开始吧。
第一步:为你要搜索的表建立索引。我们不是通过关系数据库中的表直接建立索引的。而是借助于已通过hibernate这个中间桥梁而间接的给库表建立索引。我们知道hibernate主要完成对象到库表的映射。而我们是在对象的基础上建立索引的。假如我们的库表有一个叫video(影视表)的表。有字段,id(主键,唯一编号,递增),c_name(中文名),e_name(英文名),alias(别名),genre(类型),director(导演),create_time,update_time....这个表应该对应一个对象,也就是我们常说的pojo.
Video.java
package com.jack.video public class Video{ private Integer id; private String CName; private String EName; private String alias; private String genre; pivate String director; private Date createTime; private Date updateTime; public Video(){} public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getCName() { return this.CName; } public void setCName(String CName) { this.CName = CName; } public String getEName() { return this.EName; } public void setEName(String EName) { this.EName = EName; } public String getAlias() { return this.alias; } public void setAlias(String alias) { this.alias = alias; } public String getGenre() { return this.genre } public void setGenre(String genre) { this.genre= genre; } public String getDirector() { return this.director; } public void setDirector(String director) { this.director = director; } public Date getCreateTime() { return this.ceateTime; } public void setCreateTime(Date ceateTime) { this.ceateTime = ceateTime; } public Date getUpdateTime() { return this.updateTime; } public void setUpdateTime(Date updateTime) { this.updateTime = updateTime; } }
上面这个简单的pojo没什么可讲的,大家一看就很熟悉了。
接下来我们要针对这个pojo建立索引,也就是建立一个cpm文件。具体配置如下:
Video.cpm.xml <!DOCTYPE compass-core-mapping PUBLIC "-//Compass/Compass Core Mapping DTD 1.0//EN" "http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd"> <compass-core-mapping package="com.jack.video" <class name="Video" alias="video" index="video-index"> <id name="id" /> <property name="CName"> <meta-data index="tokenized">CName</meta-data> </property> <property name="EName"> <meta-data index="tokenized">EName</meta-data> </property> <property name="alias"> <meta-data index="tokenized">alias</meta-data> </property> <property name="genre"> <meta-data index="un_tokenized">genre</meta-data> </property> <property name="director"> <meta-data index="tokenized">director</meta-data> </property> <property name="createTime"> <meta-data index="no">trueCreateTime</meta-data> </property> <property name="updateTime"> <meta-data index="no">updateTime</meta-data> </property> </class> </compass-core-mapping>
简单的配置文件讲解一下,这个文件的package属性是指导pojo(Video.java)所在的包。<class name="Video" alias="video"
index="video-index"> .name就是类名了。alias就是给这个类在起一个别名。index是指生成索引所在的文件夹的名字。后面你就会明白的。
<property name="CName">
<meta-data index="tokenized">CName</meta-data>
</property>
这个标签中的name就是Video.java中的那些属性名。<meta-data index="tokenized">这个属性指明了,该字段索引的策略,index有三个值,默认是tokenized表示先分词在索引,no表示既不分词也不索引,un_tokenized表示不分词但索引。其中还有一个属性store表示是否存储,它有两个值, yes/no.默认就是yes.表示对该字段存储。这是常用到的两个属性,其他还有很多,但是不是常用的。这两个就够了。至于其他的属性我们一般不再这里配置,一般在另外一个配置文件中统一配置。每个cpm文件都可以用到的。
第二步:配置compass文件。
<!-- compass主配置 --> <bean id="compass" class="org.compass.spring.LocalCompassBean"> <property name="compassSettings"> <props> <prop key="compass.engine.connection">E:/video</prop> <prop key="compass.transaction.factory"> org.compass.spring.transaction.SpringSyncTransactionFactory </prop> <prop key="compass.engine.analyzer.MMAnalyzer.CustomAnalyzer"> jeasy.analysis.MMAnalyzer </prop> <prop key="compass.engine.highlighter.default.formatter.simple.pre"> <![CDATA[<font color="red"><b>]]> </prop> <prop key="compass.engine.highlighter.default.formatter.simple.post"> <![CDATA[</b></font>]]> </prop> </props> </property> <property name="transactionManager"> <ref local="transactionManager" /> </property> <property name="resourceLocations"> <list> <value> classpath:com/jack/video/Video.cpm.xml </value> </list> </property> </bean> <!-- 同步更新索引 --> <bean id="hibernateGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop"> <property name="compass"> <ref bean="compass" /> </property> <property name="gpsDevices"> <list> <bean class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper"> <property name="gpsDevice" ref="hibernateGpsDevice" /> </bean> </list> </property> </bean> <!--hibernate驱动 链接compass和hibernate --> <bean id="hibernateGpsDevice" class="org.compass.spring.device.hibernate.dep.SpringHibernate3GpsDevice"> <property name="name"> <value>hibernateDevice</value> </property> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean>
在这里我并没有配置compass.cfg.xml这个文件。我把它里面该配置的都统一配置到了上面那个文件里了。
在上一篇文章中主要讲了,配置要索引的表和compass与spring整合时的配置。接下来我把余下的两部分写出来。
第三步:配置手动创建索引的功能。
这个其实只需在第一次生成索引的时候用,当系统正常运行时,compass中的hibernateGps会自动检测数据的变动,同时同步索引文件的。
首先在applicationContext.xml中配置bean.
<!-- 手工生成索引 -->
<bean id="buildIndexController"
class="org.compass.spring.web.mvc.CompassIndexController">
<property name="compassGps" ref="hibernateGps" />
<property name="indexView" value="/ftl/create.ftl" />
<property name="indexResultsView" value="/ftl/create.ftl" />
</bean>
同时我们也要配置与之相应的请求映射。
<bean id="urlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/buildindex.htm">buildIndexController</prop>
</props>
</property>
</bean>
最后就是自动生成索引的页面了,这里我用的是freemarker.用什么都一样,你可以用jsp,html.
create.ftl(在WebRoot下的ftl文件夹下)
<html>
<head>
<title>builderIndex</title>
</head>
<body>
<h1>
手工重建索引
</h1>
<p>
<form name="keyword" action="/buildindex.htm" method="post">
<INPUT type="hidden" name="doIndex" value="true">
<input type="submit" value="手工重建索引" />
</form>
<#if indexResults?exists>
本次索引耗时${indexResults.indexTime}毫秒!
</#if>
<p>
</body>
</html>
当我们点击手工重建索引按钮时,会在我们指定的索引目录下<prop key="compass.engine.connection">E:/video</prop>也就先在E:/video下生成gpsindex/video-index当索引生成完以后,会返回生成索引所用的毫秒数。这时就会把gpsindex文件夹下的video-index覆盖到E:/video/index/下的video-index文件夹。这时gpsindex/video-index也消失了。这就是简单的生成索引的过程。接下来我们要说最后一步了。索引我们已建好了,怎么去搜索我们想要的数据了。
相关推荐
Compass搜索引擎技术是一种基于...通过以上步骤,你可以在Eclipse环境下,结合MySQL数据库,利用Compass搜索引擎技术实现类似Google的搜索功能。这不仅简化了开发过程,也提升了用户体验,使得数据检索变得快速且准确。
Lucene提供了底层的搜索功能,而Compass是对Lucene的高级封装,它在Lucene的基础上添加了更多便利的功能,如ORM集成、事务支持等。对于开发者来说,使用Compass可以更快地上手,减少对Lucene底层细节的了解,提高...
它们可以帮助开发者构建高效、强大的文本搜索功能。本文将详细介绍如何使用 Compass 和 Lucene 实现一个简单的全文检索功能。 首先,Lucene 是一个高性能、全功能的文本分析库,主要用于信息检索。它提供了索引和...
而Compass则在Lucene的基础上进行了封装,使得开发者可以更方便地在自己的应用程序中集成全文搜索功能。 Compass的核心特性包括: 1. **ORM集成**:Compass支持多种对象关系映射(ORM)框架,如Hibernate、JPA和...
你需要下载并添加compass库的jar文件,然后配置Compass的连接器,使其与Hibernate集成。这样,当Hibernate进行数据操作时,Compass会自动更新索引。在Spring配置中,你可以声明一个CompassTemplate bean,它提供了与...
通过Compass,你可以将对象-关系映射(ORM)与全文检索完美结合,使得数据库中的数据能够被快速高效地搜索。 **Compass的核心特性** 1. **对象-搜索映射(OSM)**:Compass允许你定义对象-搜索映射,将Java对象与...
Compass全文检索是一个强大的搜索引擎库,它为Java应用程序提供了便捷的全文索引和搜索功能。在本实例中,我们有一个可直接运行的Compass全文检索系统,已经集成了SSH(Struts、Spring、Hibernate)框架,这是一个...
总结来说,Compass 2.1.0 jar包提供了一个便捷的途径,让你能够将全文搜索功能集成到Java应用中。通过合理的配置和使用,它可以帮助你的应用程序实现高效、精确的站内资源搜索,提升用户体验。在实际应用中,应结合...
- **高效查询**:利用Lucene的强大搜索功能,Compass提供了高效的全文检索能力。 - **事务管理**:支持事务处理,确保数据的一致性和完整性。 - **快速更新**:提供机制来加速索引更新过程,提高应用性能。 #### 二...
1. **Lucene**: Apache Lucene是一个基于Java的全文搜索引擎库,通过它可以轻松地为Java应用程序添加全文搜索功能。Lucene的主要工作是对文件中的每个词进行索引,这种索引机制极大地提高了搜索效率。它提供了一组...
通过使用Compass,开发者可以轻松地在应用程序中添加全文索引和搜索功能,从而提升用户体验和数据查询效率。 **Compass的主要特性** 1. **无缝集成**:Compass能够自动跟踪和索引数据库中的变化,使得索引始终保持...
Compass是基于Apache Lucene的一个高级全文搜索引擎,它将Lucene的功能与持久化层相结合,使得数据库中的数据能够被快速检索。Compass的核心特性包括: 1. **ORM集成**:Compass可以与流行的ORM框架如Hibernate、...
5. 实现搜索功能:在Struts2的动作类中,调用Compass提供的API进行搜索,并将结果返回到视图层展示。 6. 错误处理和优化:测试和调试搜索功能,处理可能出现的问题,如索引丢失、搜索性能低下等。 通过上述整合,...
在实际应用中,`compass+lucene`的组合使得开发者可以轻松地在Java应用中添加全文搜索功能,而无需深入了解搜索引擎的复杂细节。通过 Compass 的 ORM 集成,开发者可以直接在存储在数据库中的对象上执行全文搜索,这...
标题中的"S2SH+compass"指的是使用Struts2(S),Spring(S)和Hibernate(H)这三种开源框架的组合,再加上Compass搜索引擎库来实现一个网站内部的全文检索功能。这种组合常见于Java Web开发中,用于构建复杂、高...
6. **测试和优化**:测试搜索功能是否正常,根据性能需求进行索引优化,如分片、缓存等。 在实际项目中,使用SSH框架集成Compass插件,可以有效地提升Web应用的搜索性能,为用户提供快速、精准的查询体验。同时,...
Compass是一个基于Apache Lucene的全文搜索引擎框架,它为Java应用提供了高级的搜索功能。Compass的主要目标是简化将全文搜索引擎集成到Java应用中的过程,提供ORM(对象关系映射)支持,并且能够与多种持久化框架如...
总结:Compass 是一个强大的搜索引擎框架,它通过 OSEM 映射简化了 Java 应用程序与 Lucene 的集成,使得全文搜索功能的实现更加便捷和高效。开发者可以通过简单的配置和注解,轻松地在自己的项目中加入全文检索功能...
Compass是一个开源的.NET和Java框架,它为应用程序提供了完整的文本搜索功能。该框架支持多种搜索引擎(如Elasticsearch, Solr等),使得开发人员能够在不深入学习特定搜索引擎的情况下,轻松地在其应用中集成高级的...