实际程序调用IndexWriter* writer = NULL
最近由于项目需要,原先用MySQL实现的全文检索功能已不能满足需求,于是乎想到了利用开源的全文检索项目,经人介绍看看了Lucene,Lucene使用Java实现的,目前是Apache Jakarta的项目之一,已经有一套完整和成熟的库,可惜本人对Java懂之甚少,便找了个C++ porting的版本,看了看里面的demo,动手体验了一下,感觉用“短小、强悍”形容再恰当不过了,十几行代码便能完成建立索引和进行搜索:
建立索引:
IndexWriter* writer = NULL;
lucene::analysis::standard::StandardAnalyzer an;
// 其中target是要建立的索引名
char* target = "index_name";
writer = new IndexWriter( target ,&an, true);
Document* doc = new Document();
doc->add( *Field::Text(_T("author"), _T("abc")) );
writer->addDocument( doc );
writer->optimize();
writer->close();
搜索:
char* index = "index_name";
char* searchfor= "abc";
IndexSearcher s(index);
standard::StandardAnalyzer analyzer;
// searchfor 为需要搜索的字符串
Query* q = QueryParser::parse(searchfor, _T("author"), &analyzer);
// 返回匹配的结果集
Hits* h = s.search(q);
// 遍历结果集
for ( int32_t i=0;i<h->length();i++ ){
// 毎一条结果都是一个Document对象,引用也很方便
Document* doc = &h->doc(i);
// 结果是根据匹配度排序的:
h->score(i);
}
当然,更多的代码能实现更多的功能,如Filter, Sort等都是Lucene中的功能,对于一般的中小型应用来说,已经足够了。另外建立索引和搜索的速度,目前还没有大规模的测试,从已用过的反馈来看都还是不错的。
CLucene目前的版本还不支持中日韩等Unicode字符集,关于Lucene如何支持Unicode字符集,正在研究中,后面会与大家分享。
下面是关于Lucene的一些资源
Lucene项目主页:
http://jakarta.apache.org/lucene/
Lucene教程:
http://www.darksleep.com/puff/lucene/lucene.html
Lucene的.NET实现:dotLucene
http://sourceforge.net/projects/dotlucene/
Lucene作者Cutting的几篇论文和专利
http://lucene.sourceforge.net/publications.html
CLucene API 文档:
http://clucene.sourceforge.net/doc/html/
转载于:https://www.cnblogs.com/cy163/archive/2008/06/09/1216424.html
实际程序调用IndexWriter* writer = NULL相关推荐
- openid java_微信小程序调用微信登陆获取openid及java做为服务端示例
一.微信小程序 第一步:调用 wx.login获取code 文档地址 第二步:判断用户是否授权读取用户信息 文档地址 第三步:调用wx.getUserInfo读取用户数据 文档地址 第四步:由于小程序 ...
- 桌面程序调用Web Service应用实例
作者:朱金灿 来源:blog.csdn.net/clever101 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com ...
- python脚本编程实例_C程序调用Python脚本的例子
下面我们一起来看看关于C程序调用Python脚本的例子,如果你对此有兴趣的希望此教程对各位同学会有所帮助. 代码如下 复制代码 #include int main(){ PyObject * g_pM ...
- linux内核支持的加密算法,Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口...
本文将主要介绍,如何在应用程序空间中(user space) 调用内核空间(kernel space)加密模块提供的加密算法API. 方法一:通过调用crypto: af_alg - User-spa ...
- linux c程序调用脚本,C程序与Lua脚本相互调用
Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...
- Android原生系统开发如何优雅的提供系统级的API供第三方程序调用?
目录 故事背景 二.开发步骤 Step1.添加一个专属系统级服务 2.1.1.模仿Android原生服务接口,如WifiManager,规划自己的Manager 2.1.2.为我们的Manager生成 ...
- Java程序调用MATLAB接口
Java程序调用MATLAB接口 文章目录 Java程序调用MATLAB接口 一.注意事项 二.环境安装 三.MATLAB如何生成JAR包 四.MATLAB生成的JAR包如何引入到Java程序中 五. ...
- JAVA窗体程序调用图片、音频、字体资源
简介 介绍JAVA窗体程序调用图片.音频.字体三种静态资源的代码.使用这种方法调用静态资源,可以直接把静态资源打包到JAR包里. 在音频调用中,可能会由于Eclipse的原因报错,解决办法参见有关im ...
- 程序调用winrar自动压缩文件
程序调用winrar自动压缩文件,有时在备份文件等,完成后需要用本机的winrar对文件自动压缩并拷贝走. 这里提供一个例程: try{String winRarPath = null;if (!Ex ...
最新文章
- 父子对等组之间的关系
- 《Android开发从零开始》——29.Content Providers(1)
- 如何从服务器导出文件,如何从云服务器导出文件
- oAuth2.0 登录新浪微博 发送新浪微博 代码
- SQL Server 2005之PIVOT/UNPIVOT行列转换(转)
- linux 设备数 of,linux下devicetree中惯用的of函数
- C++ Primer Plus学习(十一)——类和动态内存分配
- 谈谈对网站性能优化的认识
- c语言funcode空格消失的函数,funcode海底世界练习c语言
- 企业固定资产管理存在的问题及改进建议
- C#软件注册与注册机
- JTF的Unable to invoke request异常或Unable to find a MessageBodyReader of content-type application..异常详解
- 股票十档行情数据接口怎么看?
- 6.misc类设备与蜂鸣器驱动
- 如何在Systemd中使用Shell脚本创建和运行新的服务
- 关于数据库工作方面的一些感悟
- Excel2021单元格怎么做下拉菜单
- 巴塞瓦尔能量守恒定理
- 如何在虚拟主机上部署java项目_如何在虚拟主机上部署java项目
- Qt 调用ftd2x API上位机踩坑指南