`
jxh118
  • 浏览: 124755 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Compass入门

阅读更多

 1.概述

Compass将lucene、Spring、Hibernate三者的起来,以很低很低的成本快速实现企业应用中的搜索功能。

HomePage: http://www.opensymphony.com/compass/ 

springside里用了compass来做图书搜索,快速建立的流程如下:

1.用简单的compass annotation把Book对象映射到Lucene。

2.配置compass默认提供的基于Spring MVC的Index Controller 和Search Controller。

3.编写查询结果的显示页面,将controller返回的变量显示出来。

 

2.Object/Search Engine Mapping的 Annotations配置

使用JDK5 的annotation 来进行OSEM(Object/Search Engine Mapping)比用xml文件按简单许多,下面就是简单的搜索类,可见@SearchableID, @SearchableProperty与@SearchableComponent 三个标记,分别代表主键、可搜索的属性与关联的,另一个可搜索的对象,另外Compass要求POJO要有默认构造函数,要实现equals()和hashcode():

public class Product  {	 
	@SearchableId
	private Integer id;
	private Category category;
	private String name;
	private Double unitprice;
	@SearchableProperty(name = "name")
    public String getName() {
        return this.name;
    }
	@SearchableComponent (refAlias = "category")
    public Category getCategory() {
        return this.category;
    }
	public Double getUnitprice() {
        return this.unitprice;
    }

 

3. 与spring,hibernate集成配置

3.1 spring配置文件

hiberante中的sessionFactory,transactionManager相比大家也是轻车熟路了.这里还是带过(因为不牵扯稿费的问题吗^_^ ).compass已经对对spring集成做了很好的封装,让我们的使用更加简单,我们可以不为compass编写一行代码,就可以做完搜索引擎的检索.下面是compass在spring中的简明配置. 详情点击查看springside中的applicationContext-lucene.xml  :

<beans>
<bean id="annotationConfiguration"          class="org.compass.annotations.config.CompassAnnotationsConfiguration"></bean>

<bean id="compass" class="org.compass.spring.LocalCompassBean">
        <!-- anontaition式设置 	-->        <property name="classMappings">            <list>                <value>org.springside.bookstore.domain.Book</value>            </list>        </property>      <property name="compassConfiguration" ref="annotationConfiguration"/>    <property name="compassSettings">
        <props>
            <prop key="compass.engine.connection">file://${user.home}/springside/compass</prop>
            <prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
        </props>
    </property>
    <property name="transactionManager" ref="transactionManager"/>
</bean>  <bean id="hibernateGpsDevice" class="org.compass.spring.device.hibernate.SpringHibernate3GpsDevice">    <property name="name">        <value>hibernateDevice</value>    </property>    <property name="sessionFactory" ref="sessionFactory"/></bean>  <bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop">
  <property name="compass" ref="compass"/>
  <property name="gpsDevices">
      <list>
          <ref local="hibernateGpsDevice"/>
      </list>
  </property></bean></beans>

 

上面要留意的配置有:

annotationConfiguration: 使用annotation配置,指定要转换的POJO如Book
compass.engine.connection : 索引文件在服务器上的存储路径.
hibernateGpsDevice: 与hibernate的绑定,用Hibernate 3 事件系统,支持Real Time Data Mirroring .经Hiberante的数据改变会自动被反射到索引里面.

3.2 web Controller的配置

两个Controller都是现成的,只要配置相关选项即可。

详情请查看springside的bookstore-servlet.xml

 

 

<bean id="indexBookController" class="org.compass.spring.web.mvc.CompassIndexController">		
<property name="compassGps" ref="compassGps"/>		
<property name=		"indexView" value="/admin/indexBook.jsp"/>		
<property name=		"indexResultsView" value="/admin/indexBook.jsp"/>    </bean>       
 <bean id="searchBookController" class="org.compass.spring.web.mvc.CompassSearchController">		
<property name="compass" ref="compass"/>		 <propertyname="searchView"value="/home/top.jsp"/>		<property name=		"searchResultsView" value="/home/searchBook.jsp"/>	
	<property name=		"pageSize" value="5"/>    
</bean>

 

 

3.3 View JSP

  简单搜索页面:只需要一个query 参数:

<INPUT type="text" size="20" name="query"> 

 

 

结果页面:

结果页面将返回几个变量,包括:

searchResults(搜索结果) 包括hits(结果)和 searchtime(耗时)
    pages(分页信息) 包括page_from page_to等
    command(原来的查询请求)

具体使用见springside的advancedSearch.jsp ,下面是简版的代码:

<c:if test="${not empty searchResults}">
                耗时: <c:out value="${searchResults.searchTime}"/>ms
                               <c:forEach var="hit" items="${searchResults.hits}">
                    <c:choose>
                        <c:when test="${hit.alias == 'book'}">
                            <div class="left_content">
                                <p>
                                    <a href="#" class= "title"> 《${hit.data.name}》
                                    </a>
                                    <br/> 作者:
                                    ${hit.data.author}
                            <br/>
                        </div>
                    </c:when>
                </c:choose>
            </c:forEach>
	</c:if>

 

 

4.扩展高级搜索

扩展高级搜索其实很简单,SpringSide已经初步封装了加入包含以下任意单词,不包含以下任何单词,分类选择等条件及每页显示条数的确定。

如果需要更多条件:

1. 加强搜索页面,加入更多条件的显示。

2. 扩展compass的command class,接受从搜索条件页传过来的条件。 可从springside的AdvancedSearchCommand  扩展或从Compass的原类扩展。

3. 扩展compass的searchController, 将command中的变量重新处理为一个符合Lucene语法规则的query变量 即可(见springside中的AdvancedSearchController ),同时可以为搜索条件页查询图书分类列表一类的变量。

   你可以从springside的AdvancedSearchController扩展,重载onSetupCommand (),参考父类的做法,加装自己的条件。重载referenceData(),把图书分类列表这种条件加入到AdvancedSearchCommand 的referenceData Map中供搜索条件页显示,例子见BookSearchController

也可以参考BookSearchControllerAdvancedSearchController的做法,完全自行扩展。

分享到:
评论

相关推荐

    Compass全文检索系列之一:Compass入门

    Compass全文检索系列之一:Compass入门 在IT领域,全文检索已经成为数据分析和信息检索的重要技术,尤其是在大数据时代。本文将介绍Compass,一个基于Lucene的全文搜索引擎库,为Java开发者提供了一种简单易用的...

    compass入门指南

    ### Compass入门指南:深入理解与实战应用 #### 核心概念解析 **1.1 Annotation vs. XML配置文件** 在Compass中,开发者可以选择使用Annotation或XML配置文件来进行配置。这两种方式各有优劣: - **Annotation...

    Sass和Compass 实战

    4. **第四章:Compass入门** – 讲解Compass的基本功能及其在项目中的集成方法。 5. **第五章至第十章** – 分别介绍响应式设计、图像处理、样式库使用等方面的实战案例。 通过阅读本书,读者将全面掌握Sass和...

    compass的几个入门网页

    下面将详细讲解Compass的基本概念、安装过程、主要功能以及如何通过它来构建入门级的网页项目。 一、Compass简介 Compass是一个开源项目,由Chris Eppstein开发,它的核心思想是提供一系列预先定义好的样式库和模块...

    Compass 的java代码

    **入门指南** 对于初学者来说,理解Compass的基本概念和用法是关键。首先,你需要配置Compass,指定数据源和索引位置。接着,定义对象-搜索映射文件(`.cmap.xml`),将你的Java类与Lucene字段对应起来。然后,你...

    foundation-compass-template:Foundation Compass模板(由F4 CLI使用)

    Foundation + Compass入门的最简单方法。 要求 Ruby 1.9以上 : gem install compass : npm install bower -g 快速开始 运行bower install以安装最新版本的Foundation 然后,当您在处理项目时,只需运行以下命令...

    compass全文检索

    网站快速加入全文检索文档,介绍compass基础知识入门、准备、开发入门等

    grunt-contrib-compass:将Compass编译为CSS

    grunt-contrib-compass v1.1.1 使用Compass将Sass编译为CSS入门如果您以前从未使用过 ,请务必查看《指南》,因为它说明了如何创建以及安装和使用Grunt插件。 熟悉该过程后,可以使用以下命令安装此插件: npm ...

    SSH+compass 整合

    本资源是struts2 + spring2.5 + hibernate 3.2 + lucene 2.4 + compass 2.0整合实例,可以为初学入门者,提供个参考,本人也是网上找的,感觉很不错(因其中所用的jar文件太大,无法上传,大家可以自己添加各框架...

    小地图Binnacle - Minimap Radar Compass

    4. **易于使用**:对于新手开发者来说,"小地图Binnacle"的直观界面和清晰的文档使其成为入门级插件的理想选择。只需简单的拖放操作,即可完成小地图和雷达的设置。 5. **优化性能**:在保持功能丰富的同时,插件...

    Lucene 3.0完成入门

    《Lucene 3.0 完成入门》 Lucene 是一个开源的全文检索库,由 Apache 软件基金会维护。它为开发者提供了一种高级的文本搜索功能,允许他们在应用程序中集成强大的搜索引擎。本篇文章将围绕 Lucene 3.0 版本,详细...

    beekeepers:MIT Beekeepers网站

    基础罗盘模板Foundation + Compass入门的最简单方法。要求Ruby 1.9以上 : gem install compass : npm install bower -g快速开始运行bower install以安装最新版本的Foundation 然后,当您在处理项目时,只需运行...

    weatherappcode

    Foundation + Compass入门的最简单方法。 要求 Ruby 1.9以上 : gem install compass : npm install bower -g 快速开始 运行bower install以安装最新版本的Foundation 然后,当您在处理项目时,只需运行以下命令...

    portfolio:朱利安·瓦兰达(Julian Varanda)投资组合网站的分支

    Foundation + Compass入门的最简单方法。 要求 Ruby 1.9以上 : gem install compass : npm install bower -g 快速开始 运行bower install以安装最新版本的Foundation 然后,当您在处理项目时,只需运行以下命令...

    trialprofiles:Aurora剧院射击审判的资料页面

    Foundation + Compass入门的最简单方法。 要求 Ruby 1.9以上 : gem install compass : npm install bower -g 快速开始 运行bower install以安装最新版本的Foundation 然后,当您在处理项目时,只需运行以下命令...

    ItemSet-Creator:项目集管理器,用于Riot API Challenge 2.0

    Foundation + Compass入门的最简单方法。 要求 Ruby 1.9以上 : gem install compass : npm install bower -g 快速开始 运行bower install以安装最新版本的Foundation 然后,当您在处理项目时,只需运行以下命令...

    workflowy:将一些工作流程列表导出转换为幻灯片显示

    基础罗盘模板Foundation + Compass入门的最简单方法。要求Ruby 1.9以上 : gem install compass : npm install bower -g快速开始运行bower install以安装最新版本的Foundation 然后,当您在处理项目时,只需运行...

    compass-pattern-primer:使用 Sass 和 Compass 创建 HTML 和 CSS 样式指南

    指南针图案入门这是指南针扩展和 ruby​​gem 的开发库: 。使用 Sass 和 Compass 创建 HTML 和 CSS 样式指南Compass Pattern Primer是一个为您的网站或 Web 应用程序快速生成样式指南的系统。 它是可以为任何网站...

    foundation-compass-template, 基础指南针模板( 由CLI使用).zip

    foundation-compass-template, 基础指南针模板( 由CLI使用) 基础指南针模板最简单的方法来开始基础 指南针。要求ruby 1.9 node.js指南针: gem install compassBower 插件: npm install bower -g快速入门下载这个...

Global site tag (gtag.js) - Google Analytics