`
hilliate
  • 浏览: 133391 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

Compass学习文档(2) (转)

阅读更多

      上面的只讲了Compass的建立索引也就是存储对象和加载对象,这里讲一下Compass的搜索查询功能。上面说了Compass和Hibernate是非常像的。Hibernate查询的时候用的是Criteriat和Query而Compass里用的是CompassQuery具有以上两个的功能。

      还是拿上面的例子做例子吧:

      在上面的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.setId((long)0); 

        article.setContent("Compass学习文档"); 

        article.setTitle("学习Compass查询"); 

        article.setPublishDate(new Date()); 

        comSession.save(article); 

        article = new Article(); 

        article.setId((long)1); 

        article.setContent("Compass是第一个基于lucene的java开源框架"); 

        article.setTitle("学习Compass"); 

        article.setPublishDate(new Date()); 

        comSession.save(article); 

        comTx.commit(); 

    } 

 

      就是插入两个对象数据。

      下面我们就搜搜体验一下吧:

public void TestQuery() 

    { 

CompassConfiguration comConfig = new
CompassConfiguration().configure().addClass(Article.class); 

        Compass com = comConfig.buildCompass(); 

        CompassSession session =
com.openSession(); 

        CompassTransaction tx =
session.beginTransaction(); 

        CompassHits hits =
session.queryBuilder() 

         
.queryString("titleIndex:学习") 

         
.toQuery() 

       
.addSort("title",
CompassQuery.SortPropertyType.STRING) 

       
.addSort("publishDate",CompassQuery.SortPropertyType.INT) 

         
.hits(); 

        for(int
i=0;i<hits.getLength();i++) 

        { 

            System.out.println(((Article)hits.data(i)).getTitle()); 

        } 

    } 

 

      输出结果是

      学习Compass查询

      学习Compass

      其实Compass完全没毕要那么罗嗦,它就是为了依照Hibernate来的。让会Hibernate的程序员可以很容易的掌握Compass。搜索的前一部分就不说了,和Hibernate的初始化一样且前面也讲了,从CompassHits开始吧。

      可以看到:搜索就用到CompassHits,Query,CompassQueryBuilder这一点又和lucene很像。

      session.queryBuilder()返回CompassQueryBuilder的对象,再调用queryString来查询搜索字串。可这个构造字串就有学问了:“titleIndex:学习”表示指明字段名搜索,如果想指明多个字段呢可以用空格和“+”隔开如:“titleIndex:学习 +contentIndex:第”

      注意:查询字串里的标识不是对象的属性,而是对象的属性映射成索引的名字,这个是可以在Article.cmp.xml里看到的。还有就是一定要在两个搜索内容之间加空格要不然什么都搜不到。

      addSort就是对搜索出的结果按一定的顺序排序。

      Hits()呢就是返回hits结果集吧。

      最后用个for循环利用hits.data(i)将结果遍历输出。

      上面的例子达到了Hibernate中Query的功能。而CompassQuery还有和Criteriat功能一样的:再看个搜索的例子吧:

CompassConfiguration comConfig = new
CompassConfiguration().configure().addClass(Article.class); 

        Compass com
= comConfig.buildCompass(); 

        CompassSession
session = com.openSession(); 

        CompassTransaction
comTx = session.beginTransaction(); 

        CompassQueryBuilder
queryBuilder= session.queryBuilder(); 

        CompassQuery
compassQuery = queryBuilder.bool().addMust(queryBuilder.le("titleIndex", "学习")).toQuery(); 

        CompassHits
hits = compassQuery.addSort("title", CompassQuery.SortPropertyType.STRING).hits(); 

        for(int
i=0;i<hits.getLength();i++) 

        { 

            System.out.println(((Article)hits.data(i)).getTitle()); 

        } 

        comTx.commit();

       CompassQuery里有lt,le,gt,ge和Criteriat是一个样的。不过Compass的jar包里没有eq这个函数,但是在Compass1.1M1的帮助文档中写着:

CompassQueryBuilder queryBuilder = session.createQueryBuilder();
 queryBuilder.bool().addMust(queryBuilder.eq("name", "jack")).addMust(queryBuilder.lt("birthdate", "19500101"))
      .toQuery().hits();

      这个可能是Compass的一个bug。

      既然没有eq我们就用:

      queryBuilder.bool().addMust(queryBuilder.le("titleIndex", "学习")).toQuery();做个演示吧。

      结果理想的。

      具体的用法和Hibernate一样,也可以查看Compass的帮助文档。
 

分享到:
评论
2 楼 osacar 2011-06-13  
楼主讲得不错。
1 楼 zhou568xiao 2008-09-03  
先看看哦!

相关推荐

    Compass学习文档1

    Compass学习文档1.doc

    compass和wellplan学习总结.doc

    compass和wellplan学习总结.doc

    compass和wellplan学习总结材料.doc

    compass和wellplan学习总结材料.doc

    2022年度复盘2023年度计划模板 -year compass简体中文.pdf

    该文档为一份年度复盘与计划模板,名为"Year Compass"。它旨在帮助用户回顾过去一年的重要时刻、成就和挑战,并基于这些反思来规划新的一年的目标和梦想。模板鼓励用户选择代表过去一年的词汇、描述重要事件、评估...

    安卓(Android)程序开发初级教程技术文档【视频+教程+源码】

    网上发行的一个资料很适合初学者,安卓经典Android开发入门教程,有实例,有android开发视频教程,还附带源码,欢迎各位下载一起学习! 教程(一) 平台简介  令人激动的Google手机操作系统平台-Android正式发布了,...

    网络爬虫+MongoDB库

    • Compass能够可视化的查看数据库中的数据,而且可以添加集合、文档等操作。 • 实际编码环节,如果遇到未定义的数据库或集合的话,MongoDB会自动创建这些内容。 内容概要:BSON、查询、更新、插入、删除、索引、...

    自己动手写搜索引擎

    该书详细讲解了搜索引擎与信息检索基础,Lucene入门实例,Lucene索引的建立,使用Lucene进行搜索,排序,过滤和分页,Lucene的分析器,对Word、Excel和PDF格式文档的处理,Compass搜索引擎框架,Lucene分布式和...

    java源码包2

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    bootstrap精简教程_动力节点Java学院整理

    bootstrap 的学习非常简单,并且它所提供的样式又非常精美。...这是 Bootstrap 从 Less 到 Sass 的源码移植项目,用于快速地在 Rails、Compass 或 只针对 Sass 的项目中引入。 其实我们不用下

    Android应用程序开发教程PDF电子书完整版、Android开发学习教程

    + Camera, GPS, compass, and accelerometer: 都依赖于硬件支持。 + Rich development environment: 包含一套完整的开发工具集,方便跟踪调试,内存检测和性能测试,而且 提供了 Eclipse 的插件。 最底层的是一个 ...

    arvoreAVL:帮助Roraima联邦研究所的系统分析和开发课程的毕业生学习“二叉树”数据结构。 我们要求新学员不断更新此代码,并在代码正文中保留尽可能多的文档,以便更好地理解。

    该项目包括创建和完善用Java开发的工具,以协助Roraima联邦研究所系统分析和开发课程的新毕业生学习数据结构专业,重点是研究“二叉树”类型。 ”。 我们要求新学员不断更新此代码,并在代码正文中保留尽可能多的...

    java源码包---java 源码 大量 实例

    2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包3

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java源码包4

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...

    Stable Baselines:一组基于OpenAI Baselines强化学习算法的改进实现-python

    Stable Baselines:一组基于OpenAI Baselines强化学习算法的改进实现 Stable Baselines Stable Baselines 是一组基于 OpenAI Baselines 的强化学习算法的改进实现。 您可以在 Medium 文章中阅读有关稳定基线的详细...

Global site tag (gtag.js) - Google Analytics