`
wjjbfq
  • 浏览: 82114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

compass搜索

阅读更多

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搜索引擎技术

    Compass搜索引擎技术是一种基于Lucene的全文检索框架,它提供了更高级别的API和集成机制,使得在Java应用程序中实现搜索引擎功能变得更加便捷。Compass的主要目标是将全文索引能力无缝地融入到现有的业务应用程序中...

    Spring ,JPA,Compass使用注解开发的博客站内搜索

    标题 "Spring ,JPA,Compass使用注解开发的博客站内搜索" 涉及的是在Java开发环境中,利用Spring框架、Java Persistence API (JPA) 和 Compass搜索引擎来实现一个博客系统的站内搜索功能。这是一项关键的技术,因为...

    基于Lucene的搜索引擎框架Compass教程

    **基于Lucene的搜索引擎框架Compass教程** 在信息爆炸的时代,如何快速、准确地检索到所需数据成为了一个关键问题。Lucene,一个强大的全文搜索引擎库,为开发者提供了强大的索引和搜索功能。然而,直接使用Lucene...

    Compass+SSH搜索引擎简单项目

    【SSH+Compass搜索引擎简单项目】是一个基于Struts2(S),Hibernate(H)和Spring(S)的Java Web应用程序,结合了Compass搜索引擎库,用于实现对数据库中两个表的高效检索功能。这个项目旨在提供一个清晰易懂的...

    compass2.1.4包+所用lucene包+中文分词器

    Compass 是一个基于 Lucene 的全文检索框架,它提供了一种高级的、面向对象的方式来管理和集成搜索引擎到你的应用程序中。在“compass2.1.4包”中,包含了 Compass 框架的版本 2.1.4,这个版本可能包含了性能优化、...

    Compass全文检索完整实例,可运行

    Compass全文检索是一个强大的搜索引擎库,它为Java应用程序提供了便捷的全文索引和搜索功能。在本实例中,我们有一个可直接运行的Compass全文检索系统,已经集成了SSH(Struts、Spring、Hibernate)框架,这是一个...

    compass索引插件demo

    **Compass搜索引擎** Compass是基于Lucene的全文搜索引擎,它提供了更多的高级特性,如支持GEO空间搜索、实时索引、事务处理等。Compass与Hibernate集成,可以自动跟踪和索引Hibernate实体,使得数据库中的数据能够...

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

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

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

    标题中的"S2SH+compass"指的是一个基于Struts2(S),Spring(S)和Hibernate(H)这三种开源框架的Java Web应用,再加上Compass搜索引擎来实现站内全文检索的功能。这种组合常用于构建复杂的企业级应用,因为它提供...

    compass对象搜索引擎

    Compass对象搜索引擎是一款基于Lucene的全文搜索引擎框架,它为Java开发者提供了高级的搜索功能,使得在应用程序中集成全文检索变得更加便捷。Compass的核心理念是将数据库中的对象与Lucene索引之间建立映射...

    lucene 搜索引擎 compass

    《Lucene搜索引擎与Compass框架详解》 在信息化飞速发展的今天,搜索引擎已经成为了我们获取信息的重要工具。Apache Lucene是一个高性能、全文本检索库,它提供了基础的索引和搜索功能,使得开发者能够轻松地在应用...

    compass_hibernate_spring3.zip

    Compass 是一个全文搜索引擎库,它为 Java 应用提供了类似 Google 的搜索功能。Hibernate 是一个流行的对象关系映射(ORM)框架,用于简化数据库操作。Spring 3 是一个全面的企业级应用开发框架,提供了依赖注入、...

    compass+ssh2集成 hibernategps问题

    标题中的“compass+ssh2集成 hibernategps问题”指的是在Java开发中,开发者尝试将Compass搜索引擎库与SSH2(Spring、Struts和Hibernate)框架整合时遇到的问题,特别是与Hibernate的GPS(Global Persistent ...

    java搜索 compass资料

    ### Java搜索 Compass 资料知识点 #### 一、Compass 概述 Compass 是一个为 Java 应用程序提供全文检索功能的框架。它能够帮助开发者在 Java 应用程序中轻松实现复杂的搜索需求,并且具有较高的性能。Compass 基于...

    compass 全文搜索

    Compass全文搜索是一个基于Apache Lucene的高性能、易用的全文搜索引擎工具。Lucene是Java开发的开源库,它提供了文本分析、索引和搜索的基本功能。而Compass则在Lucene的基础上进行了封装,使得开发者可以更方便地...

    网上搜索引擎 补充的lib

    " Compass" 是一种特定的搜索引擎库,它为开发者提供了一种强大的工具来增强网站搜索功能。在这个场景中,"补充的lib" 指的是针对 Compass 搜索引擎的额外库或模块,这些组件可能是为了优化性能、增加新特性或者修复...

Global site tag (gtag.js) - Google Analytics