Compass学习文档(1) (转)

      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.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<hits.length();i++)

        {

            Document doc = hits.doc(i);

            System.out.println(doc.get("contentIndex"));//大家可以在这里设置个断点看一下doc里各个Field是什么。就会学到很多的东西

        }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用MongoDB Compass进行查询非常简单。首先,打开MongoDB Compass并连接到您的MongoDB数据库。然后,选择要查询的数据库和集合。接下来,点击查询选项卡,在查询编辑器中输入您的查询语句。 查询语句的语法和功能与MongoDB的查询语法相同。您可以使用各种操作符和选项来过滤和排序结果。如果您对查询语句还不太了解,您可以参考MongoDB的官方文档或其他在线资源来学习更多关于查询的详细信息。 在MongoDB Compass中,您还可以使用“筛选器”功能来帮助构建查询。通过使用筛选器,您可以通过简单地选择字段和条件来构建一个基本的查询,而无需手动编写查询语句。 最后,当您完成查询语句或筛选器并点击运行查询时,MongoDB Compass将显示查询结果,并提供了一些工具来帮助您分析和理解查询结果。 希望这些信息对您有帮助。如果您还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MongoDBCompass使用教程](https://blog.csdn.net/rookie_java_/article/details/120488226)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Mongodb compass查询指定条件的数据](https://blog.csdn.net/qq_36098927/article/details/81298728)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值