基于Java的搜索引擎:Compass

Compass是一款基于Lucene的开源搜索引擎框架,提供了简单的API、事务支持及对象到搜索引擎的映射等功能,适合集成于使用Hibernate或Spring的项目中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Compass是第一个实现java搜索引擎的开源框架,它是基于Lucene之上的,提供更简单的搜索引擎API,事务支持,对象到搜索引擎映射(Annotations & XML),Xml到搜索引擎映射,可以和Hibernate,Spring集成,功能非常的强大。如果用Hibernate,Spring做的项目需要搜索引擎的话,Compass是个非常好的选择。Compass是用面向对象编程方法来实现搜索。如果会Hibernate的话学Compass是非常容易的。   虽然有人说Hibernate3.1以后版本自带了对Lucene的支持,Compass好像没用,但是只要看一下Hibernate源代码可以看出Hibernate对Lucene的支持很简陋,且不支持事务并且Hibernate3.2用的还是Lucene版本是Lucene1.4.3,所以说当做大的项目的时候Compass还是非常有必要的。
  还是先看个HelloWorld程序:(这里的测试功能的例子都是用的JUnit测试用例,为方便阅读异常全部抛出)
  一共4个文件Article.java, compass.cfg.xml,Article.cpm.xml,JUnit插入测试。
  1.Article.java:
  
      package org.li.compass;   import java.util.Date;
  public class Article
  {
  private long id;
  private String title;
  private String content;
  private Date publishDate;
  public String getContent()
  {
  return content;
  }
  public void setContent(String content)
  {
  this.content = content;
  }
  public Date getPublishDate()
  {
  return publishDate;
  }
  public void setPublishDate(Date publishDate)
  {
  this.publishDate = publishDate;
  }
  public String getTitle()
  {
  return title;
  }
  public void setTitle(String title)
  {
  this.title = title;
  }
  public long getId()
  {
  return id;
  }
  public void setId(long id)
  {
  this.id = id;
  }
  }
上面就是一个Article的POJO类上面有文章题目,内容,发布时间,这里的id的compass必须的(有点和数据库一样了)。   2.compass.cfg.xml
  /"-//Compass/Compass Core Configuration DTD 1.0//EN/"
  /"http://www.opensymphony.com/compass/dtd/compass-core-configuration.dtd/">
  target/test
  这是Compass的配置文件上面标明了索引目录和映射文件。映射好文件了就看看这个映射的什么吧
  3. Article.cpm.xml
  /"-//Compass/Compass Core Mapping DTD 1.0//EN/"
  /"http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd/">
  type
  java
  titleIndex
  contentIndex
  publishDateIndex
  这个配置应该可以看的懂吧可能会有人问meta-data是干什么用的??
  它的值是作为底层Field的名字,如果没有配置的话Compass用$article/…来代替。而它的作用是配置对象的属性的储存形式,Compass就是读取它来new Field()的:#PCDATA)>
  4.JUnit插入测试
  
      public void InsertCompass()   {
  CompassConfiguration comConfig = new CompassConfiguration().configure().addClass(Article.class);
  Compass com = comConfig.buildCompass();
  CompassSession comSession = com.openSession();
  CompassTransaction comTx = comSession.beginTransaction();
  Article article = new Article();
  article.setContent(/"Compass是第一个基于lucene的java开源框架/");
  article.setTitle(/"学习Compass/");
  article.setPublishDate(new Date());
  comSession.save(article);
  comTx.commit();
  }
当大家看到这里的时候就看出来Compass和Hibernate太像了。如果会Hibernate的话,学Compass将是非常容易的。   看看效果如何:
         public void LoadCompass()   {
  CompassConfiguration comConfig = new CompassConfiguration().configure().addClass(Article.class);
  Compass com = comConfig.buildCompass();
  CompassSession comSession = com.openSession();
  CompassTransaction comTx = comSession.beginTransaction();
  Article article = (Article)comSession.load(Article.class, 0);
  System.out.println(article.getTitle());
  System.out.println(article.getContent());
  System.out.println(article.getPublishDate());
  }
  结果:  学习Compass
  Compass是第一个基于lucene的java开源框架
  Sat Sep 23 00:51:35 CST 2006
  注意:和其它的框架一样,Compass也是需要一定的配置的,而Compass的数据配置可分为Annotations,DTD验证的XML和Schema验证的XML。这里用的是dtd验证的XML配置。
  我们可以用Lucene做一下检测嘛
  JUnit测试用例:
        public void TestArticle() throws ParseException, IOException   {
  QueryParser queryParser = new QueryParser(/"titleIndex/",new StandardAnalyzer());
  Query query = queryParser.parse(/"compass/");
  IndexSearcher indexSearcher = new IndexSearcher(/"target/test/index/article/");
  Hits hits = indexSearcher.search(query);
  for(int i=0;i {
  Document doc = hits.doc(i);
  System.out.println(doc.get(/"contentIndex/"));
  }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值