读书人

谈一下compass和sorl 的比较

发布时间: 2012-10-28 09:54:44 作者: rapoo

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

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

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

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

大家说说自己的意见看看。


第二步:
使用annotatio声明要索引的object,如下所示,自己根据需要进行设置
相关文档 参考:http://www.compass-project.org/docs/2.2.0M2/reference/html/core-osem.html#core-osem-searchableclasses

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();        }    }}


这样就可以了 10 楼 em_kxh 2009-02-13 还有,建议你看看springside版本2中的compass应用

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

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


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

11 楼 em_kxh 2009-02-13 再提供一个参考资料,compass手册翻译,虽然不至于精确理解,也可以给个人一些提示

http://chanson.iteye.com/category/34202 12 楼 mniz 2009-03-14 真是好人,呵呵,不过用我会点,整合的也做了 就是想了解了解和其他的区别
不过还是谢谢你啊 13 楼 mniz 2009-03-14 http://hi.baidu.com/mniz/blog/item/2c77c7312774251eebc4afba.html
简单的例子,整合的我没放上来 14 楼 imjl 2009-03-14 汗~, lucene是什么, compass是什么, solr是什么

各自起了什么作用,明白了再来讨论把 15 楼 highriver 2009-04-22 compass的原理是基于hibernate的事件监听。
compass比较lucene的好处:
1.直接对pojo进行保存。而不用操作底层的Document,Field.
2.支持增量索引。而不用定时重建索引。
3.最重要的是简化了分布式索引的创建。支持与terracotta等网格合作。

至于分类统计这个compass好象不支持。看你需求了。还有就是SSH项目中,做基于数据库的垂直搜索很好用。

读书人网 >软件架构设计

热点推荐