基于Java的搜索引擎:Compass

导读:
  Compass是第一个实现java搜索引擎的开源框架,它是基于Lucene之上的,提供更简单的搜索引擎API,事务支持,对象到搜索引擎映射(Annotations & XML),Xml到搜索引擎映射,可以和Hibernate,Spring集成,功能非常的强大。如果用Hibernate,Spring做的项目需要搜索引擎的话,Compass是个非常好的选择。个人认为:如果说Lucene是搜索引擎中的JDBC,那么Compass就是Hibernate。而Compass和Hibernate不仅仅是比喻的像,它们的类和用法,和作用也非常的像。Compass是用面向对象编程方法来实现搜索。如果会Hibernate的话学Compass是非常容易的。
  大家可以到http://www.opensymphony.com/compass/download.action去下载最新的版本。2006年8月28日Compass 1.1 M1 发布,用的是Lucene2.0,现在讲的就是这个版本。
  虽然有人说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/"));//大家可以在这里设置个断点看一下doc里各个Field是什么。就会学到很多的东西
  }
  }
  [upload=1][/upload]
  --
  我再一次的后悔了!!知道天多高地多厚了!!! 

本文转自
http://www.javaresearch.org/article/84629.htm
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值