Java的lucene是正统,功能更强大,开发快速,而且和J2EE天然融合(都是使用Java),怎么看都比clucene强多了。那为什么要使用clucene呢?原因有两个:
一:C++的速度快。当对索引速度有更高数量级的要求时,单纯设置MergeFactor和MinMergeDocNum无法实现的。
二:索引的内容如果是另外的C++写的工具的结果,那么用clucene就比lucene有优势,否则要么使用文件作为中间结果,要么使用JNI,都不是很好的办法。综上,clucene还是有点用的。
《lucene in action》中在介绍clucene是居然没有提clucene的索引与lucene的兼容性,倒是对C#的Dotlucene大书特书。实际上,clucene的索引目前来说还是和lucene兼容的。clucene的作者mail list里提到好像要放弃这种兼容性,天晓得以后会怎样。反正现在是兼容的。
默认情况下(configure的时候带参数--enable-ucs2 即使用ucs2编码),clucene使用的是wchar_t类型。这个wchar_t在windows下为2个字节,在linux下为4个字节,不过无所谓,对于clucene来说没有什么影响。
Java在读入文本时,可以指定编码。如果没有指定,则使用系统默认的编码。windows(中文版)为ansi,实际上就是GBK。linux系统默认的编码似乎和locale有关,一般情况下为utf-8。将文本读入内存后,Java统一使用unicode对字符编码,所以只要读入时的编码正确,就没有问题。Java版的lucene写索引时使用modified utf-8编码,与utf-8的区别在于对'\0'进行处理,把它写成两个字节。另外modified utf-8编码最长使用3字节。
可惜clucene(http://clucene.org/)没有Java那么多库可以用。为了省事,它才不管原始文件是GBK、BIG5还是UTF-8编码,完全按照UNICODE处理。这种情况下,如果程序没有崩溃(奇迹...),生成的索引对于Java版的lucene来说完全是天书。当然,ASCII码除外。
为了解决这个问题,可以在进行索引之前,把文本转化为unicode。linux下有著名的iconv包。听说windows下有专门的api。这里需要注意的是,用iconv生成的unicode是小尾端(little endian),所以转化后读入wchar_t时要
char* result;
iconv(...,&result,...);
......
//result中保存转换好的unicode字符
size_t s = strlen(result);
size_t i = 0;
char high, low;
while(i<s){
low = result[i];
high = result[i+1];
wchar_t w = (low & 0xff) + ((high & 0xff)<<8);
i += 2;
}
......
这样子才能正确解析。
如此一来,clucene生成的索引就可以被lucene识别了。前台还是使用J2EE,管它什么Struts,还是Servlet,后台生成索引部分就完全用clucene来替代。经过实验对比,在数据量不大的情况下,clucene建索引的速度是lucene的两倍左右。
之所以提高不明显,因为创建索引时的io太多。对于io来说C++相对与Java确实优势不大。但是待索引的内容是其他C++工具生成的,比如SVM,CRF,LDA等等,这些工具的C++版肯定是比Java版要快得多,所以改用clucene还是值得的。
http://bbs.rednet.cn/thread-24398963-1-1.html
分享到:
相关推荐
对clucene的一些改进,能够处理中文字符
Clucene使用示例 用c++写的搜索引擎使用实例,简单明了,是一个非常好的学习资料
Clucene库,以及自己封装好的Clucene方法库。该库提供了可直接调用的用于建立索引,查询索引的接口。输出结果返回的是一个满足条件的文件链表。
上次那个库对应的.h和.lib忘了共享了。在这里补上
对clucene0.9.21版本在vc6下调试demo希望对你的开发有帮助
CLucene是Lucene的一个C++端口,Lucene是一个基于java的高性能的全文搜索引擎。CLucene因为使用C++编写,所以理论上要比lucene快。
用C++改写的Lucene
大名鼎鼎的clucene,是lucene的c++ 版; CLucene README ============== ------------------------------------------------------ CLucene is a C++ port of Lucene. It is a high-performance, full-featured ...
C++搜索引擎Clucene源码
这是我学CLUCENE时期整理出来的几个不错的资料,我觉得里面总有一款会适合你,而且你所需要知道的技术里面基本上都是涵盖的,所以可以当作教材或者参考手册使用。(里面有CLUCENE,可以用的)
CLucene 是C++版本的Lucene, .CLucene API文档地址:http://clucene.sourceforge.net/doc/html/index.html
CLucene类结构文档 内嵌源代码及各类关系图
总得来说用Lucene来进行建立 和搜索和操作数据库是差不多的(有点像),Document可以看作是 数据库的一行记录,Field可以看作是数据库的字段。用lucene实 现搜索引擎就像用JDBC实现连接数据库一样简单。
clucene2.3.3.4源码 CMake制作的,windows下的vs2013工程,编译通过,学习全文检索、搜索引擎的好资料
09年最新源码,鼎力推荐,吐血推荐。非常好的东西,值得学习。
网上下载的代码在生成vs2005工程的时候包错,改动了下cmake的文件。成功生成了vs2005的工程。
clucene-core-2.3.3.4版本,基于vs2012版,cmake出来的c++源码,内部的bin目录有编译好的动态库
以前的资源vs2005是我本机生成的,直接用是没法用的。 上传个干净的,vs2005要自己生成,里面有个说明文档。
第一节 全文检索系统与Lucene简介··· 3 一、 什么是全文检索与全文检索系统?··· 3 二、 什么是Lucene?··· 4 三、 Lucene的应用、特点及优势··· 4 ...四、 关于cLucene项目··· 25
离线安装包,亲测可用