用compass快速给你的网站添加搜索功能
如果你的网站架构采用的是spring+hibernate。用现在比较流行的开源搜索引擎框架compass可以快速的给你的网站添加强大的搜索功能。从几十万条数据中,只需几毫秒的时间就可以搜索出你想要的数据。
我现在只讲快速的把搜索功能构建到你的系统中。至于配置的细节,可能点到为止。望能够原谅。让我们开始吧。
第一步:为你要搜索的表建立索引。我们不是通过关系数据库中的表直接建立索引的。而是借助于已通过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
<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是一个开源的.NET和Java框架,它为应用程序提供了完整的文本搜索功能。该框架支持多种搜索引擎(如Elasticsearch, Solr等),使得开发人员能够在不深入学习特定搜索引擎的情况下,轻松地在其应用中集成高级的...
Compass搜索引擎技术是一种基于Lucene的全文检索框架,它提供了更高级别的API和集成机制,使得在Java应用程序中实现搜索引擎功能变得更加便捷。Compass的主要目标是将全文索引能力无缝地融入到现有的业务应用程序中...
总的来说,使用 Compass 和 Lucene 实现全文检索功能,能够极大地提升 Java 应用的搜索体验,让开发者能够快速响应用户的查询需求。这两个工具的结合使用,不仅可以处理简单的文本搜索,还能够应对复杂的查询条件和...
Lucene提供了底层的搜索功能,而Compass是对Lucene的高级封装,它在Lucene的基础上添加了更多便利的功能,如ORM集成、事务支持等。对于开发者来说,使用Compass可以更快地上手,减少对Lucene底层细节的了解,提高...
Compass是基于Apache Lucene的一个高级全文搜索引擎,它将Lucene的功能与持久化层相结合,使得数据库中的数据能够被快速检索。Compass的核心特性包括: 1. **ORM集成**:Compass可以与流行的ORM框架如Hibernate、...
Compass是一款基于Apache Lucene的全文搜索引擎库,它为Java开发者提供了一个高级的、易于使用的搜索框架。在Java应用中集成搜索引擎功能时,Compass提供了一种简化的方式来管理和操作Lucene索引。通过Compass,你...
Compass全文搜索是一个基于Apache Lucene的高性能、易用的全文搜索引擎工具。Lucene是Java开发的开源库,它提供了文本分析、索引和搜索...这对于初学者来说是一个很好的起点,可以帮助快速理解和上手Compass全文搜索。
Compass是一款开源的全文搜索引擎库,它为Java应用程序提供了强大的搜索功能。 Compass 2.1.0 版本是这个库的一个重要版本,它优化了性能并修复了一些已知问题,使得在应用中集成和使用更加顺畅。在这个jar包中,你...
为了实现搜索功能,你需要创建一个搜索Action,该Action可以调用由Spring管理的Service,Service再通过CompassTemplate执行查询。你可以使用Compass提供的Gps接口或者自定义查询语句来实现对索引的检索。检索结果...
Compass是一款基于Lucene的全文搜索引擎工具,它简化了在Java应用程序中集成全文搜索功能的过程。这个名为"Compass.rar"的压缩包包含了用于在Eclipse开发环境中测试Compass的应用程序。Eclipse是一款广泛使用的开源...
1. **Lucene**: Apache Lucene是一个基于Java的全文搜索引擎库,通过它可以轻松地为Java应用程序添加全文搜索功能。Lucene的主要工作是对文件中的每个词进行索引,这种索引机制极大地提高了搜索效率。它提供了一组...
这个实例提供了从零开始使用Compass进行全文检索的一个起点,通过它你可以快速地了解和实践Compass的使用,同时也可以学习如何在SSH框架下整合全文检索功能。在深入学习和实践中,你将进一步掌握如何利用Compass提升...
- **Lucene**:Apache Lucene是一个用Java编写的高性能全文搜索引擎库。它提供了丰富的API用于构建索引、执行查询等操作。Lucene的核心功能包括文档索引、文本解析、索引搜索等。开发者可以根据需要自定义索引规则,...
标题中的"S2SH+compass"指的是使用Struts2(S),Spring(S)和Hibernate(H)这三种开源框架的组合,再加上Compass搜索引擎库来实现一个网站内部的全文检索功能。这种组合常见于Java Web开发中,用于构建复杂、高...
Compass和Lucene是两个非常重要的Java开源搜索引擎库,它们在处理海量数据的搜索和索引方面发挥着关键...如果你正在寻找一种将搜索功能集成到Java应用的方法,那么 Compass 和 Lucene 的组合无疑是一个值得考虑的选择。
通过Compass,开发者可以轻松地为数据库中的对象添加全文索引,实现快速的全文搜索。 Lucene,另一方面,是Apache软件基金会的一个项目,它是一个高性能、可扩展的信息检索库。Lucene提供了完整的搜索功能,包括...
而Compass是一个基于Lucene的搜索引擎库,它简化了在Java应用中集成全文搜索的功能。 首先,让我们详细了解一下SSH2中的每个框架: 1. Spring:这是一个轻量级的IoC(Inversion of Control)和AOP(Aspect-...
**一、添加 NuGet 包** 1. **安装 MongoDB.Driver** - 打开 Visual Studio,找到项目的 NuGet 包管理器。 - 搜索并安装 `MongoDB.Driver` 包。 - 这是 Mongodb .NET 驱动的核心组件。 **二、编写访问 Mongodb ...
Compass是基于Java的一个全文搜索引擎库,它为Java应用程序提供了与Lucene搜索引擎库的无缝集成。在SSH(Spring、Struts和Hibernate)框架中集成Compass插件,可以帮助开发者轻松实现数据的全文检索功能,提高应用的...