最近由于项目需要,原先用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相关推荐

  1. openid java_微信小程序调用微信登陆获取openid及java做为服务端示例

    一.微信小程序 第一步:调用 wx.login获取code 文档地址 第二步:判断用户是否授权读取用户信息 文档地址 第三步:调用wx.getUserInfo读取用户数据 文档地址 第四步:由于小程序 ...

  2. 桌面程序调用Web Service应用实例

    作者:朱金灿 来源:blog.csdn.net/clever101 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com ...

  3. python脚本编程实例_C程序调用Python脚本的例子

    下面我们一起来看看关于C程序调用Python脚本的例子,如果你对此有兴趣的希望此教程对各位同学会有所帮助. 代码如下 复制代码 #include int main(){ PyObject * g_pM ...

  4. linux内核支持的加密算法,Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口...

    本文将主要介绍,如何在应用程序空间中(user space) 调用内核空间(kernel space)加密模块提供的加密算法API. 方法一:通过调用crypto: af_alg - User-spa ...

  5. linux c程序调用脚本,C程序与Lua脚本相互调用

    Lua脚本是一种可用于C程序开发/测试的工具,本篇介绍一下C程序与Lua脚本如何进行相互调用,更加详细的操作参见<Programing in Lua>.本文分为3个部分:1.Windows ...

  6. Android原生系统开发如何优雅的提供系统级的API供第三方程序调用?

    目录 故事背景 二.开发步骤 Step1.添加一个专属系统级服务 2.1.1.模仿Android原生服务接口,如WifiManager,规划自己的Manager 2.1.2.为我们的Manager生成 ...

  7. Java程序调用MATLAB接口

    Java程序调用MATLAB接口 文章目录 Java程序调用MATLAB接口 一.注意事项 二.环境安装 三.MATLAB如何生成JAR包 四.MATLAB生成的JAR包如何引入到Java程序中 五. ...

  8. JAVA窗体程序调用图片、音频、字体资源

    简介 介绍JAVA窗体程序调用图片.音频.字体三种静态资源的代码.使用这种方法调用静态资源,可以直接把静态资源打包到JAR包里. 在音频调用中,可能会由于Eclipse的原因报错,解决办法参见有关im ...

  9. 程序调用winrar自动压缩文件

    程序调用winrar自动压缩文件,有时在备份文件等,完成后需要用本机的winrar对文件自动压缩并拷贝走. 这里提供一个例程: try{String winRarPath = null;if (!Ex ...

最新文章

  1. 父子对等组之间的关系
  2. 《Android开发从零开始》——29.Content Providers(1)
  3. 如何从服务器导出文件,如何从云服务器导出文件
  4. oAuth2.0 登录新浪微博 发送新浪微博 代码
  5. SQL Server 2005之PIVOT/UNPIVOT行列转换(转)
  6. linux 设备数 of,linux下devicetree中惯用的of函数
  7. C++ Primer Plus学习(十一)——类和动态内存分配
  8. 谈谈对网站性能优化的认识
  9. c语言funcode空格消失的函数,funcode海底世界练习c语言
  10. 企业固定资产管理存在的问题及改进建议
  11. C#软件注册与注册机
  12. JTF的Unable to invoke request异常或Unable to find a MessageBodyReader of content-type application..异常详解
  13. 股票十档行情数据接口怎么看?
  14. 6.misc类设备与蜂鸣器驱动
  15. 如何在Systemd中使用Shell脚本创建和运行新的服务
  16. 关于数据库工作方面的一些感悟
  17. Excel2021单元格怎么做下拉菜单
  18. 巴塞瓦尔能量守恒定理
  19. 如何在虚拟主机上部署java项目_如何在虚拟主机上部署java项目
  20. Qt 调用ftd2x API上位机踩坑指南

热门文章

  1. day26-3 模拟ssh远程执行命令
  2. 对于细节的一些处理和领悟
  3. C# 7中函数多值返回_转自InfoQ
  4. 【3-12】数据库子查询及聚合函数
  5. Android 源码VecotorDrawable
  6. ygm900常用网站
  7. Spring中bean的scope详解
  8. Hibernate3的配置参数汇总
  9. Win64 驱动内核编程-17. MINIFILTER(文件保护)
  10. 【C 语言】指针间接赋值 ( 间接赋值三要素 | 间接赋值 使用的三种场景 )