compass对于lucene就像hibernate对于jdbc一样,使用方法和hibernate差不多。
Hibernate/LopLink/JPA (ORM)
compass OSEM(Object/Search Engine Mapping)
使用方法:
1、导入所需要的包:
dist/commons-logging.jar
dist/compass-2.2.0.jar
dist/lucene/lucene-analyzers.jar
dist/lucene/lucene-core.jar
dist/lucene/lucene-highlighter.jar
dist/lucene/lucene-queries.jar
dist/lucene/lucene-snowball.jar
dist/lucene/lucene-spellchecker.jar
2、使实体与数据区document 一一映射
这里使用注解的方式:
@Searchable 设置这个类存储到document
@SearchableId 搜索实体的标识属性。
@SearchableProperty 用于普通属性 将java类的属性映射到lucene的document中的field。
(index:设置是否需要分词或建索引
Index.NOT_ANALYZED 不分词但建立索引
Index.ANALYZED 分词并建立索引
Index.NO
store:是否将值存储 eg: Store.YES
boost :设置属性在索引中的重要性 越大级别越高 默认为1)
@SearchableComponent 用于复合类型的属性。
在引用类型的类上设置 在引用类中 Searchable(root =false)
如果引用的名称和其它的相同,比如都是name,要设置name值,name=typename
@SearchableReference
3、保存索引
在hibernate中我们使用sessionfactory管理session 使用session来保存修改删除实体。这里也类似
我们首先创建一个compass 管理CompassSession 使用CompassSession 来保存修改删除实体。
public class ProductSearchBean{
private Compass compass = null;
public ProductSearchBean(){
try {
//编程式配置
compass = new CompassAnnotationsConfiguration()
.setSetting(CompassEnvironment.CONNECTION, "file://indexfile")
//.setSetting(CompassEnvironment.CONNECTION, "ram://index")//在内存中建立索引
.setSetting("compass.engine.highlighter.default.formatter.simple.pre","<font color='red'>")
.setSetting("compass.engine.highlighter.default.formatter.simple.post","</font>")//设置高亮为红色
.addScan("cn.itcast.bean").buildCompass(); //在cn.itcast.bean包下面搜索包含compass注解的类
} catch (Exception e) {
e.printStackTrace();
}
}
//创建索引,compass支持增量索引.
public void buildIndex(){
CompassSession session = null;
CompassTransaction tx = null;
try {
session = compass.openSession();
tx = session.beginTransaction();
Product p1 = new Product(12,"c瑜珈球","非常好的瑜珈球",12f, "www", 2, 12); //新建一个产品
session.create(p1);
Product p2 = new Product(35,"b瑜珈球","天花板瑜珈球,good",42f, "mmm",2,9);
session.create(p2);
Product p3 = new Product(8,"a蓝球瑜珈球","蓝球小子",125f, "ppp",5,8);
session.create(p3);
tx.commit();
} catch (CompassException e) {
e.printStackTrace();
tx.rollback();
}finally{
if(session!=null && !session.isClosed()) session.close();
}
}
// 删除索引,session. session.delete(product);
//更新就是先删除再创建。
//查询 QueryResult 是自己写的一个分页的结果集类,有属性List<T> resultlist; long totalrecord
public QueryResult<Product> search(String keyword, int firstIndex, int maxResult) {
QueryResult<Product> qr = new QueryResult<Product>();
CompassSession session = null;
CompassTransaction tx = null;
try {
session = compass.openSession();
tx = session.beginTransaction();
//对所有索引Field进行搜索,你也可以指定对某个Field搜索,如:"name:jack",如果想指定多个字段可以用空格和"+"隔开如"name:jack +content:xxx"
CompassHits hits = session.find(keyword);
List<Product> products = new ArrayList<Product>();
//下面length表示某页内容的最大id值
int length = firstIndex+ maxResult;
if(length>hits.length()) length = hits.length();
for(int i=firstIndex; i<length; i++){
Product product = (Product)hits.data(i);
//高亮显示
product.setContent(hits.highlighter(i).fragment("content"));
products.add(product);
}
qr.setResultlist(products);
qr.setTotalrecord(hits.length());
hits.close();
} catch (CompassException e) {
e.printStackTrace();
tx.rollback();
}finally{
if(session!=null && !session.isClosed()) session.close();
}
return qr;
}
//多样查询
public QueryResult<Product> search(String keyword, Integer typeid, int firstIndex, int maxResult) {
QueryResult<Product> qr = new QueryResult<Product>();
CompassSession session = null;
CompassTransaction tx = null;
try {
session = compass.openSession();
tx = session.beginTransaction();
//查询指定类别的匹配记录,并按position字段 降序排序
CompassQueryBuilder queryBuilder = session.queryBuilder();
CompassHits hits = queryBuilder.bool()
.addMust(queryBuilder.spanEq("typeid", typeid))
.addMust(queryBuilder.queryString(keyword).toQuery())
.toQuery().addSort("position", SortPropertyType.FLOAT, SortDirection.REVERSE)
.hits();//类似于这个sql: typeid=1 and (xxxx like ?) order by positoin desc
List<Product> products = new ArrayList<Product>();
int length = firstIndex+ maxResult;
if(length>hits.length()) length = hits.length();
for(int i=firstIndex; i<length; i++){
Product product = (Product)hits.data(i);
product.setContent(hits.highlighter(i).fragment("content"));
products.add(product);
}
qr.setResultlist(products);
qr.setTotalrecord(hits.length());
hits.close();
} catch (CompassException e) {
e.printStackTrace();
tx.rollback();
}finally{
if(session!=null && !session.isClosed()) session.close();
}
return qr;
}
}
分享到:
相关推荐
Compass搜索引擎技术是一种基于Lucene的全文检索框架,它提供了更高级别的API和集成机制,使得在Java应用程序中实现搜索引擎功能变得更加便捷。Compass的主要目标是将全文索引能力无缝地融入到现有的业务应用程序中...
标题 "Spring ,JPA,Compass使用注解开发的博客站内搜索" 涉及的是在Java开发环境中,利用Spring框架、Java Persistence API (JPA) 和 Compass搜索引擎来实现一个博客系统的站内搜索功能。这是一项关键的技术,因为...
**基于Lucene的搜索引擎框架Compass教程** 在信息爆炸的时代,如何快速、准确地检索到所需数据成为了一个关键问题。Lucene,一个强大的全文搜索引擎库,为开发者提供了强大的索引和搜索功能。然而,直接使用Lucene...
【SSH+Compass搜索引擎简单项目】是一个基于Struts2(S),Hibernate(H)和Spring(S)的Java Web应用程序,结合了Compass搜索引擎库,用于实现对数据库中两个表的高效检索功能。这个项目旨在提供一个清晰易懂的...
Compass 是一个基于 Lucene 的全文检索框架,它提供了一种高级的、面向对象的方式来管理和集成搜索引擎到你的应用程序中。在“compass2.1.4包”中,包含了 Compass 框架的版本 2.1.4,这个版本可能包含了性能优化、...
Compass全文检索是一个强大的搜索引擎库,它为Java应用程序提供了便捷的全文索引和搜索功能。在本实例中,我们有一个可直接运行的Compass全文检索系统,已经集成了SSH(Struts、Spring、Hibernate)框架,这是一个...
**Compass搜索引擎** Compass是基于Lucene的全文搜索引擎,它提供了更多的高级特性,如支持GEO空间搜索、实时索引、事务处理等。Compass与Hibernate集成,可以自动跟踪和索引Hibernate实体,使得数据库中的数据能够...
标题提及的"COMPASS+spring构建自己的搜索引擎"是关于如何使用Compass搜索引擎框架与Spring框架集成,构建一个自定义的全文搜索引擎。Compass是一个开源的搜索引擎库,它提供了与ORM框架(如Hibernate)的集成,使得...
标题中的"S2SH+compass"指的是一个基于Struts2(S),Spring(S)和Hibernate(H)这三种开源框架的Java Web应用,再加上Compass搜索引擎来实现站内全文检索的功能。这种组合常用于构建复杂的企业级应用,因为它提供...
Compass对象搜索引擎是一款基于Lucene的全文搜索引擎框架,它为Java开发者提供了高级的搜索功能,使得在应用程序中集成全文检索变得更加便捷。Compass的核心理念是将数据库中的对象与Lucene索引之间建立映射...
《Lucene搜索引擎与Compass框架详解》 在信息化飞速发展的今天,搜索引擎已经成为了我们获取信息的重要工具。Apache Lucene是一个高性能、全文本检索库,它提供了基础的索引和搜索功能,使得开发者能够轻松地在应用...
Compass 是一个全文搜索引擎库,它为 Java 应用提供了类似 Google 的搜索功能。Hibernate 是一个流行的对象关系映射(ORM)框架,用于简化数据库操作。Spring 3 是一个全面的企业级应用开发框架,提供了依赖注入、...
标题中的“compass+ssh2集成 hibernategps问题”指的是在Java开发中,开发者尝试将Compass搜索引擎库与SSH2(Spring、Struts和Hibernate)框架整合时遇到的问题,特别是与Hibernate的GPS(Global Persistent ...
### Java搜索 Compass 资料知识点 #### 一、Compass 概述 Compass 是一个为 Java 应用程序提供全文检索功能的框架。它能够帮助开发者在 Java 应用程序中轻松实现复杂的搜索需求,并且具有较高的性能。Compass 基于...
Compass全文搜索是一个基于Apache Lucene的高性能、易用的全文搜索引擎工具。Lucene是Java开发的开源库,它提供了文本分析、索引和搜索的基本功能。而Compass则在Lucene的基础上进行了封装,使得开发者可以更方便地...
" Compass" 是一种特定的搜索引擎库,它为开发者提供了一种强大的工具来增强网站搜索功能。在这个场景中,"补充的lib" 指的是针对 Compass 搜索引擎的额外库或模块,这些组件可能是为了优化性能、增加新特性或者修复...