`
mniz
  • 浏览: 30997 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

谈谈compass和sorl 的比较

阅读更多
想请各位大牛谈谈compass和solr的比较?
不要说compass支持索引事务处理这么简单的东西。想了解一下compass和sorl掌握的难度,
现在企业的应用的情况以及大家一般都是用什么东西来做搜索引擎的,compass or solr or lucnene?

前些天时间自己用compass 搞了个搜索的东西,那个真不好用,例子非常少。。目前为止还有很多没搞定

刚才看了下solr 文档那个感觉比compass详细多了,等下看看他的例子,compass的例子 跑不起来。

如果用纯lucene的话,我怎么感觉比用这么些个框架还要好实现,最起码网上的资料非常多。
虽然用纯lucene写起来代码比较繁琐,最起码遇到问题的时候还有个参考,可以找找,compass..? 没找到

大家说说自己的意见看看。
分享到:
评论
15 楼 highriver 2009-04-22  
compass的原理是基于hibernate的事件监听。
compass比较lucene的好处:
1.直接对pojo进行保存。而不用操作底层的Document,Field.
2.支持增量索引。而不用定时重建索引。
3.最重要的是简化了分布式索引的创建。支持与terracotta等网格合作。

至于分类统计这个compass好象不支持。看你需求了。还有就是SSH项目中,做基于数据库的垂直搜索很好用。
14 楼 imjl 2009-03-14  
汗~, lucene是什么, compass是什么, solr是什么

各自起了什么作用,明白了再来讨论把
13 楼 mniz 2009-03-14  
http://hi.baidu.com/mniz/blog/item/2c77c7312774251eebc4afba.html
简单的例子,整合的我没放上来
12 楼 mniz 2009-03-14  
真是好人,呵呵,不过用我会点,整合的也做了 就是想了解了解和其他的区别
不过还是谢谢你啊
11 楼 em_kxh 2009-02-13  
再提供一个参考资料,compass手册翻译,虽然不至于精确理解,也可以给个人一些提示

http://chanson.iteye.com/category/34202
10 楼 em_kxh 2009-02-13  
还有,建议你看看springside版本2中的compass应用

compass应用的关键是osem的配置,两种方式 XML 和 annotation
所以需要仔细研究下osem,这里说下个别参数的个人理解
alias别名: 是为了说明在使用compass进行搜索时,搜索的结果中应该查询的对象是哪个,比如是搜索博客文章 还是 搜索论坛 贴子,在写查询条件时,如果设置了此配置项,需要说明这个参数,以便精确搜索

其它的只需要声明 id 和 property(索引哪个字段的内容)


compass的索引是和hibernate操作同步的,也就是实时索引,这方面未曾研究过

9 楼 em_kxh 2009-02-13  
其实compass只是简单的应用的话,也很容易上手的
假如使用了hibernate+spring+compass
关于compass在spring中的配置如下,保存为一个xml文件,在web.xml中引入即可
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<bean id="annotationConfiguration" class="org.compass.annotations.config.CompassAnnotationsConfiguration"></bean>

	<bean id="compass" class="org.compass.spring.LocalCompassBean">
		<!-- 这里的配置意思是指需要搜索的POJO对象 -->
		<property name="classMappings">
			<list>
				<value>com.tourye.model.TnInfomation</value>
			</list>
		</property>
                <!-- 这里的配置意思是指使用annotation进行compass配置 -->
		<property name="compassConfiguration" ref="annotationConfiguration" />
		<property name="compassSettings">
			<props>
				<prop key="compass.engine.connection">/home/dev/compass</prop>这里说明索引文件所放的目录
				<prop key="compass.transaction.factory">org.compass.spring.transaction.SpringSyncTransactionFactory</prop>
				<!-- <prop key="compass.engine.analyzer.default.type">net.paoding.analysis.analyzer.PaodingAnalyzer</prop> -->这里的注释是为了说明使用paoding的分词器,由于测试时,有时会出问题,所以暂时禁用
			</props>
		</property>
		<property name="transactionManager">
			<ref bean="transactionManager" />
		</property>
		<!--
			高亮设置,未测试成功,需要相关的代码辅助 <property name="compass.engine.highlighter.default.formatter.simple.pre"> <value><![CDATA[<font
			color="red"><b>]]></value> </property> <property name="compass.engine.highlighter.default.formatter.simple.post">
			<value><![CDATA[</b></font>]]></value> </property>
		-->
	</bean>
        下面的两段配置是为了说明compass构建索引与hibernate的insert/delete/update操作同步
	<bean id="hibernateGpsDevice" class="org.compass.gps.device.hibernate.HibernateGpsDevice">
		<property name="name">
			<value>hibernateDevice</value>
		</property>
		<property name="sessionFactory">
			<ref bean="mySessionFactory" />
		</property>
		<property name="nativeExtractor">
			<bean class="org.compass.spring.device.hibernate.SpringNativeHibernateExtractor" />
		</property>
	</bean>

	<bean id="compassGps" class="org.compass.gps.impl.SingleCompassGps" init-method="start" destroy-method="stop">
		<property name="compass">
			<ref bean="compass" />
		</property>
		<property name="gpsDevices">
			<list>
				<bean class="org.compass.spring.device.SpringSyncTransactionGpsDeviceWrapper">
					<property name="gpsDevice" ref="hibernateGpsDevice" />
				</bean>
			</list>
		</property>
	</bean>

	<!-- 自动随Spring ApplicationContext启动而重建索引,未研究 -->
	<bean id="compassIndexBuilder" class="com.tourye.service.timer.CompassIndexBuilder" lazy-init="false">
		<property name="compassGps" ref="compassGps" />
		<property name="buildIndex" value="true" />
		<property name="lazyTime" value="10" />
	</bean>
</beans>


第二步:
使用annotatio声明要索引的object,如下所示,自己根据需要进行设置
相关文档 参考:http://www.compass-project.org/docs/2.2.0M2/reference/html/core-osem.html#core-osem-searchableclasses
@Searchable
public class TnInfomation implements java.io.Serializable {
    /**
	 * 
	 */
    private static final long serialVersionUID = -4503017770118428686L;
    
    @SearchableId(name = "id")
    private Long              id;
    
    private int               type;
    @SearchableProperty(name="title")
    private String            title;
    @SearchableProperty(name="keywords")
    private String            keywords;
    @SearchableProperty(name="content")
    private String            content;
    private int               author;
    private Date              createtime;
    private Date              updatetime;
    @SearchableProperty(name="approvetime")
    private Date              approvetime;
    private int               clicks;
    private int               critiques;
    private String            provenance;
    @SearchableProperty(name="status")
    private byte              status; /* 待审核(0) 已审核(1)*/


第三步,建立搜索service
public class InfomationSearchServiceImpl implements InfomationSearchService {
    private Compass compass;

    public Compass getCompass() {
        return compass;
    }

    public void setCompass(Compass compass) {
        this.compass = compass;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * com.tourye.infomation.compass.InfomationSearchService#search(java.lang
     * .String, int, int)
     */
    public CompassSearchResults search(String query, int page, int pageSize) throws Exception {
        CompassSession session = compass.openSession();
        try {
            session.beginTransaction();
            //构建compass查询编辑器
            CompassQueryBuilder querybuilder = session.queryBuilder();
            CompassQuery cq = null;
            CompassSearchCommand csc = null;
            //声明查询条件,query是查询字符串
            if (StringUtils.isNotEmpty(query)) {
                cq = querybuilder.bool().addMust(querybuilder.spanEq("status", 1)).addMust(
                        querybuilder.queryString(query).toQuery()).toQuery();
                cq.addSort("approvetime", CompassQuery.SortDirection.REVERSE);
                csc = new CompassSearchCommand(cq, new Integer(Math.max(0, page - 1)));
            } else {
                csc = new CompassSearchCommand(query.trim());
            }
            // 搜索命令InfomationSearchHelper和CompassSearchHelper相同,自己可以实现
            InfomationSearchHelper searchHelper = new InfomationSearchHelper(compass, pageSize);
            CompassSearchResults searchResults = searchHelper.search(csc);

            return searchResults;
        } finally {
            if (session != null) session.close();
        }
    }
}


这样就可以了
8 楼 xiaoxin5230 2009-02-02  
如果是使用ssh框架建议用compass,compass封装的比较好,只是有个问题就是中文资料比较少,而且 不全。。
7 楼 liuye 2009-01-14  
建议使用solr,其中的分组统计功能特别好使,例子也多,只是稍稍部署有点烦。Compass与Hibernate Search个人感觉差不多,两者与Hibernate集成都不用写什么代码,Compass还支持好几种持久框架集成,Hibernate Search好像只支持Hibernate。想diy,就直接用Lucene。
6 楼 chenlb 2009-01-14  
solr 可以比较快速的建立一个应用. 因为 lucene 的文档结构是可配置的.

compass 不太了解, 它也可以配置吧
5 楼 mniz 2009-01-04  
恩,那到时,纯lucene 确实比较繁琐,而compass封装好了,不过它的API可能由于是能力有限,所以不大会用
solr 呢?谁用过,说说意见啊

我喜欢lucene技术,也不知道是为什么喜欢 ?所以想来问问
4 楼 Goodtiger 2009-01-04  
Hibernate Search也是对Lucene的一个封装,我几年前使用Lucene做过一个项目,也不是很麻烦,Compass之类的框架也只是一个封装,至少你不用做很多重复性的劳动。
3 楼 mniz 2009-01-03  
Hibernate的search 是采用lucene写的还是什么?
2 楼 liuzongan 2009-01-03  
见意使用hibernate search
1 楼 liuzongan 2009-01-03  
见意使用hibernate search

相关推荐

    mongodb安装包和compass

    Compass是MongoDB的官方图形界面工具,它提供了一个用户友好的界面,用于可视化数据库和集合,帮助开发者和管理员进行数据探索、查询构建、性能分析以及基本的数据库管理。通过Compass,用户可以轻松地浏览和操作...

    compass完整可用项目

    1. **源代码**:这部分包含了项目的Java源文件,可能包含了Compass、Lucene、SSH和JSP的相关实现。 2. **配置文件**:如`compass.conf`,可能定义了Compass的配置,如索引位置、连接到的数据源等。 3. **jar包**:...

    compass和wellplan学习总结.pdf

    10. Compass和WellPlan的比较:Compass和WellPlan都是油气井设计的软件工具,它们都支持井设计、井施工、井测试、井生产等阶段。但是,Compass和WellPlan之间存在一些差异,例如,Compass更强调井设计的精度和准确性...

    compass教程.pdf

    COMPASS 是一款专业的油气田设计和生产软件,主要用于油气田的规划、设计和生产过程。下面是 COMPASS 的一些重要知识点: 1. COMPASS WELLPLAN FOR WINDOWS 功能简介:COMPASS 的核心功能包括 PLANNING(设计)、...

    Sass和Compass 实战

    Compass是一款基于Sass的CSS框架,它提供了一组功能强大的工具集和样式库,帮助开发者快速构建响应式网站和应用程序。Compass通过一系列的混合器和组件简化了CSS开发过程,使得开发者可以专注于设计而非繁琐的编码...

    compass搜索引擎技术

    Compass搜索引擎技术是一种基于Lucene的全文检索框架,它提供了更高级别的API和集成机制,使得在Java应用程序中实现搜索引擎功能变得更加便捷。Compass的主要目标是将全文索引能力无缝地融入到现有的业务应用程序中...

    Sass和Compass设计师指南pdf+源码

    《Sass和Compass设计师指南》是一本专为前端开发者和设计师编写的深入解析Sass和Compass技术的专业书籍。Sass(Syntactically Awesome Style Sheets)是一种强大的CSS预处理器,它扩展了CSS语法,增加了变量、嵌套...

    mongodb compass1.15.1官网版 免安装直接使用

    Compass作为其配套工具,帮助开发者和管理员更好地理解和管理数据库。它具有以下主要功能: 1. 数据浏览:Compass可以显示数据库的集合(类似于关系数据库中的表)以及其中的文档(类似记录)。用户可以通过图形...

    compass_使用详解.pdf compass_教程 compass_试用案例

    与传统的 Lucene 相比,Compass 提供了更高级别的抽象和更简单的 API,从而降低了开发难度。 #### 二、Compass 与 Lucene 和 Hibernate 的关系 ##### 2.1 Lucene 简介 - **Lucene** 是一个高性能的全文检索引擎库...

    Sass和Compass设计师指南 中文扫描完整版

    Sass和 Compass设计师指南是中文扫描完整版

    java搜索 compass资料

    实现了`hashCode()` 和 `equals()` 方法,这是为了确保实体对象在集合中正确存储和比较。 #### 四、Compass 在项目中的集成 要将Compass集成到Java项目中,除了下载JAR包外,还需要配置Compass环境。这通常包括...

    mongodb-compass-1.17.0-win32-x64 MongoDB可视化工具Compass

    MongoDB Compass是MongoDB公司开发的一款强大的图形化管理工具,专为MongoDB数据库设计,用于帮助用户更加直观地理解和操作NoSQL数据库。本压缩包文件"mongodb-compass-1.17.0-win32-x64"包含了适用于Windows 32位和...

    Compass 的java代码

    在Java应用中集成搜索引擎功能时,Compass提供了一种简化的方式来管理和操作Lucene索引。通过Compass,你可以将对象-关系映射(ORM)与全文检索完美结合,使得数据库中的数据能够被快速高效地搜索。 **Compass的...

    compass和wellplan学习总结材料.doc

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

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

    Compass和Lucene是两个在Java世界中非常重要的搜索引擎框架,它们在处理文本检索和全文索引方面具有强大的功能。这个压缩包包含了一个完整的Compass工程,MySQL的建库SQL脚本,以及相关的学习资料,非常适合想要深入...

    Compass原理深入学习笔记

    在理解Compass之前,我们需要先了解全文检索的基本概念和原理。 全文检索是相对于传统的基于字段查询的数据库查询而言的。在数据库查询中,我们通常使用SQL语句,例如`LIKE %ming%`来查找包含"ming"的记录,但这并...

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

    通过学习和实践Compass,开发者可以轻松地为Java应用程序添加强大的全文检索功能,提高用户体验,提升数据的可发现性。同时,Compass的灵活性和扩展性使其在各种场景下都能发挥重要作用,无论是小型项目还是大型企业...

    compass annotation关联关系

    通过在 Java 类或其属性上添加特定的注解,Compass 可以自动处理对象到索引的转换和反转换,减少了手动配置的复杂性。 二、主要 Annotation 1. @Searchable:用于标记整个类,表示该类是一个可被搜索的实体。 2. @...

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

    Compass 和 Lucene 是两个在 Java 开发环境中广泛使用的全文搜索引擎工具。它们可以帮助开发者构建高效、强大的文本搜索功能。本文将详细介绍如何使用 Compass 和 Lucene 实现一个简单的全文检索功能。 首先,...

Global site tag (gtag.js) - Google Analytics