最近,我在阅读和学习Clucene的源代码,在此记录学习和使用心得。网上也有一些分析教程。但几乎都是大同小异。
搜索是本身是一个偏重于算法和流程的东西。我感觉使用面向过程的编程模式反而更好理解一些,但Clucence使用C++的特性,高度面向对象化,到处是接口。反而加大了理解难度。
clucene的特点:
- 支持Ascii和unicode两种字符集。
- 支持多线程并行查询。
- 支持多种查询方式。
- 代码组织结构清晰简洁。
- 几乎不依赖第三方库,部署配置简单。
- 索引文件格式独立于应用平台,程序可以跨平台编译运行。
- 程序自带有多种分析器,并且很容易扩展。
- Clucene提供的api,比较简单易懂。
Clucence的难点有:
- 在代码中,使用了较多的设计模式。设计模式主要有职责链模式,工厂模式,组合模式,迭代器模式等。
- 构建索引的过程。
- 索引合并的过程。
- 权重打分的算法。
- 模糊查询的实现。
- Bool查询的实现。
- 一些算法的实现(跳跃表的实现,边界距离的实现)。
- 代码量比较大,但也没有日志,跟踪不到整个流程。
Clucence的几个重要术语有:http://blog.csdn.net/smartfox80/article/details/52182689