`
fuyangchang
  • 浏览: 147192 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Compass学习文档

阅读更多

Compass学习文档(1)
作者:javafish
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
<!DOCTYPE compass-core-configuration PUBLIC
    "-//Compass/Compass Core Configuration DTD 1.0//EN"
    "http://www.opensymphony.com/compass/dtd/compass-core-configuration.dtd"
>
<compass-core-configuration>
 
<compass>
  
<setting name="compass.engine.connection">target/test</setting><!-- 这里配置的是索引的相对路径 -->
  
<mapping resource="org/li/compass/Article.cpm.xml"/><!-- 这里是每个对象的映射文件 -->
 
</compass>
</compass-core-configuration>

这是Compass的配置文件上面标明了索引目录和映射文件。映射好文件了就看看这个映射的什么吧
3. Article.cpm.xml
<!DOCTYPE compass-core-mapping PUBLIC
    "-//Compass/Compass Core Mapping DTD 1.0//EN"
    "http://www.opensymphony.com/compass/dtd/compass-core-mapping.dtd"
>
<compass-core-mapping package="org.li.compass">
 
<class name="Article" alias="article">
  
<!-- 这是必须有的 -->
  
<id name="id"/>
  
<!-- 你可以通过这个配置来在底层给这个对象加一个Field("type","java") -->
  
<constant>
   
<meta-data>type</meta-data>
   
<meta-data-value>java</meta-data-value>
  
</constant>
  
<!-- 配置一下属性 -->
  
<property name="title">
   
<meta-data>titleIndex</meta-data>
  
</property>
  
<property name="content">
   
<meta-data>contentIndex</meta-data>
  
</property>
  
<property name="publishDate">
   
<meta-data>publishDateIndex</meta-data>
  
</property>
 
</class>
</compass-core-mapping>

这个配置应该可以看的懂吧可能会有人问meta-data是干什么用的??
它的值是作为底层Field的名字,如果没有配置的话Compass用$article/…来代替。而它的作用是配置对象的属性的储存形式,Compass就是读取它来new Field()的:
<!ELEMENT meta-data (
    #PCDATA
)>
    <!ATTLIST meta-data store (no|yes|compress) "yes">
    <!ATTLIST meta-data index (no|tokenized|un_tokenized) "tokenized">
    <!ATTLIST meta-data term-vector (no|yes|positions|offsets|positions_offsets) "no">
    <!ATTLIST meta-data reverse (no|reader|string) "no">
    <!ATTLIST meta-data analyzer CDATA #IMPLIED>
    <!ATTLIST meta-data exclude-from-all (true|false) #IMPLIED>
    <!ATTLIST meta-data converter CDATA #IMPLIED>
    <!ATTLIST meta-data format CDATA #IMPLIED>
    <!ATTLIST meta-data boost CDATA #IMPLIED>
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.class0);
  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<hits.length();i++)
  {
   Document doc = hits.doc(i);
   System.out.println(doc.get("contentIndex"));//大家可以在这里设置个断点看一下doc里各个Field是什么。就会学到很多的东西
  }


分享到:
评论
1 楼 tllyf 2010-09-18  
不错不错!!  理解!!

相关推荐

    Compass学习文档1

    Compass 是一个强大的开源搜索引擎框架,它建立在 Lucene 的基础之上,为 Java 开发者提供了更为简洁的搜索引擎 API。Compass 的设计目标是简化搜索引擎的集成,使其能够无缝地与现有的应用程序,如 Hibernate 和 ...

    Compass原理深入学习笔记

    【Compass原理深入学习笔记】 Compass是一款基于Apache Lucene的全文搜索引擎框架,它为开发者提供了更高级别的抽象层,简化了搜索引擎的集成工作。在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 ...

    Lucene+compass学习资料

    其索引结构基于倒排索引,能快速定位到包含特定词汇的文档,使得搜索性能卓越。在学习Lucene时,重点应掌握如何创建索引、执行查询以及优化搜索性能。 接着,我们转向Compass。Compass是一个基于Lucene的全文搜索...

    完整compass工程+建库sql+学习资料

    `compass学习笔记.doc`是一份关于Compass的学习文档,可能包含了使用Compass的基本步骤,常见问题解答,以及一些最佳实践。这份文档对于理解Compass的工作原理和实际应用是非常有价值的。 `lucene总结.chm`和`...

    compass完整可用项目

    此项目对于理解Compass和Lucene在实际应用中的使用,以及如何结合SSH框架开发Java Web应用具有很高的学习价值。通过分析和研究这个项目,开发者可以深入掌握Java全文搜索引擎的实现,以及如何在SSH框架下组织和管理...

    compass的几个入门网页

    2. 学习Compass的核心概念,如网格系统、样式库和混入。 3. 实践创建简单项目,应用Compass的功能来编写样式。 4. 阅读官方文档和在线教程,加深理解。 5. 参考其他开发者的工作,了解如何在实际项目中使用Compass。...

    compass和wellplan学习总结.doc

    本文档总结了Compass和WellPlan的学习笔记,涵盖了油气工业中常用的井trajectory设计和分析、Well Planning和设计等方面的知识点。 一、井trajectory设计和分析 井trajectory设计和分析是油气工业中非常重要的一环...

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

    学习Compass可以从官方文档开始,了解其基本概念和API用法。此外,网上有许多教程和社区讨论,可以深入学习Compass的高级特性,如优化索引性能、定制分析器等。 总结,Compass作为基于Lucene的搜索引擎框架,为Java...

    mongodb安装包和compass

    在Node.js学习过程中,MongoDB和Compass的结合使用可以帮助你更好地理解和操作数据库。通过Node.js的MongoDB驱动,你可以编写JavaScript代码来与MongoDB交互,创建和查询集合,执行CRUD(创建、读取、更新、删除)...

    compass-2.2.0.zip

    Lucene是Apache软件基金会的一个项目,它是一个高性能、全文本搜索库,但是直接使用Lucene可能会涉及到很多底层细节,对开发者来说有一定的学习曲线。Compass的出现就是为了降低这个门槛,使得开发人员可以更加专注...

    使用compass+lucene实现简单的全文检索功能

    这通常涉及读取数据源中的信息,然后通过 Compass 将每个文档的关键信息转换为 Lucene 可理解的格式并建立索引。索引过程可以配置为实时、批量或定期执行。 4. **索引映射**:在 Compass 中,需要定义索引字段与...

    compass和wellplan学习总结材料.doc

    compass 和 wellplan 学习总结材料 compass 和 wellplan 是油气行业中常用的软件,分别用于钻井设计和油井规划。以下是 compass 和 wellplan 的学习总结材料。 一、compass 的创建 compass 是一款专业的钻井设计...

    compass:COMPASS 文档和用户手册

    《compass:COMPASS 文档和用户手册》是针对 Compass 框架的详细参考资料,它为开发者和用户提供了深入理解及使用 Compass 的关键知识。Compass 是一个强大的 CSS(层叠样式表)预处理器,它扩展了 CSS 语言,使得...

    mongodb-compass-1.20.5-win32-x64.rar

    Compass是MongoDB官方提供的一个重要组件,它使用户能够直观地与MongoDB交互,无需深入学习复杂的查询语言。 MongoDB Compass的核心功能包括: 1. **数据可视化**:Compass提供了一个清晰的数据视图,将MongoDB...

    Compass_Setup_2010-06-25_16-11.rar

    2. 用户手册:PDF文档,详细介绍了软件的使用方法、操作流程和常见问题解答。 3. 更新日志:列出该版本相对于前一版本的改进和修复内容。 4. 配套库和驱动:包含必要的库文件和驱动程序,确保软件与不同GPS设备的...

    mongodb-compass-1.27.1-win32-x64.zip

    通过使用MongoDB Compass,数据库管理员和开发者可以更有效地管理MongoDB实例,提高工作效率,同时降低错误和学习曲线。它是MongoDB生态系统中的重要组成部分,尤其是对于那些需要图形化操作和快速数据洞察的团队而...

    基于Compass2.2与Spring 结合建立索引的实例

    该框架支持多种搜索引擎(如Elasticsearch, Solr等),使得开发人员能够在不深入学习特定搜索引擎的情况下,轻松地在其应用中集成高级的全文搜索功能。 #### 二、项目模型定义 在本文档的第一部分,展示了`...

    mongodb-compass-community-1.16.4-win32-x64.zip

    MongoDB是一种流行的开源NoSQL数据库系统,以文档型数据模型为主,支持键值对、集合和JSON格式的数据存储。MongoDB的设计目标是提供高可用性、高性能和易于扩展的解决方案,特别适合处理大规模数据和实时应用程序。...

    mongodb-compass-community-1.12.8-win32-x64.exe

    总的来说,MongoDB Compass是MongoDB用户不可或缺的工具,无论是在学习、开发还是日常运维过程中,都能极大地提升工作效率和体验。这个特定的版本号(1.12.8)意味着它包含了截至发布日期的所有已知修复和改进,确保...

    [sass+compass+susy+源码实战]css设计师指南

    压缩包内的 "sass与compass实战-文字版.pdf" 可能包含了详细的步骤说明、代码示例和最佳实践,而 "sass和compass设计师指南(pdf 源码).zip" 文件则可能包含更多实践项目和源代码,供你参考和学习。 总的来说,这...

Global site tag (gtag.js) - Google Analytics