1. Xapian的官方网站是http://www.xapian.org,是一个非常优秀的开源搜索引擎项目,搜索引擎其实只是一个通俗的说法,正式的说法其实是IR(Information Retrieval)系统。
2. Xapian的License(版权许可证)是GPL,意味着允许使用者自由地修改其源码并发布之。Xapian允许开发人员添加高级索引和搜索功能到他们的应用系统。
GNU:一个自由软件工程项目。
GPL:General Public License,GNU通用公共许可证。
3. Xapian是STL编程的典范。
STL =Standard Template Library,标准模板库,STL是一些“容器”、算法和其他一些组件的集合。STL现在是C++的一部分,STL可分为容器(containers)、迭代器(iterators)、空间配置器(allocator)、配接器(adaptors)、算法(algorithms)、仿函数(functors)六个部分。
4. xapian在支持概率论检索模型的同时也支持布尔型操作查询集。
5. xapian的查询机制:
6. Xapian现在的版本默认是使用flint作为存储系统,flint是以块的形式来存储,默认每块是8K,理论上每一个文件最大可以达到2048GB。
7. Xapian使用unsigned32-bit ints作为Documents的id值,因此在每个Xapian的Database中,最多可容纳40亿个Documents。
8. 而Xapian的Terms和Documents都是使用B-树来存储的,很多关系数据库的索引都是用B-树或B+树来存储的,具有增删改查比较方便迅速的特点,缺点则是如果索引被删除后的空间不能重复利用,为了提高性能,通常要经常重建索引。
9. Omega附带了Omindex和ScriptIndex这两个索引生成工具,可以将硬盘上的html,pdf,图片甚至视频影片索引起来并生成Database,通过操作这些由Omindex或ScriptIndex生成的Database,Omega提供了搜索这些文件的功能。
10. 在Xapian中,索引通常比被索引的documents还要多,这表示Xapian做一个信息检索系统比做一个信息存储系统更适合。
11. B树的分支因子(即每个结点能容纳的关键字的数量)越大,B树的查找性能就越强;但由于通常情况下,B树的结点都是存储在永久存储系统(例如硬盘/磁带)中,每次访问某个结点都会将整个结点由永久存储系统读入到内存中,这是一个博弈的过程:假设一棵数据量很大的B树,将B树的分支因子设到很大,这棵B树会长得很矮,从理论上来说查找性能可能很高。但这样就带来了一个弊端,每个结点所占的内存非常多,如果在一个并发访问量很大的IR系统中采用这种方式的话所使用的内存必定是非常可观的。因此在调整“.dB”文件的默认块大小的时候一定要充分考虑cpu体系和操作系统平台,以便调整到最佳性能。
12.查询的过程简单来说就是把用户的查询进行分词,再把分词后的结果与索引的文档分词进行比较,返回包括这些词的文档.
13.例如:一个数据库有500个文档,其中有50个文档符合定义的问题。系统检索到75个文档,但是只有45个符合定义的问题。
召回率R=45/50=90%
精度P=45/75=60%
精度:检出文档中相关文档的比例。
召回率:相关文档被检出的比例。
精度和召回率相互矛盾,只能取舍不能调和,由分词策略直接影响。
14.Xapian默认的排序模式称为BM25Weight,这是一种将词频和document等元素出现的频率通过一个固定的公式得出排序权重的模式,权重越高则相关度越高,如果不想使用BM25Weight作为排序模式,可以使用BoolWeight,BoolWeight模式里的各种元素的权重都为0。
15.它支持概率信息检索模型,也支持一组丰富的布尔查询操作符。默认情况下,Xapian可以使用任意组合的复杂的布尔型查询表达式来缩小检索的范围,然后将结果按概率性排序。
16.QueryParser类解析查询字符串生成Query(查询)。
17. Xapian里的所有东西都是用UTF-8来保存的.
18.Xapian对于分词的索引不仅仅是存储一个文档所对应的term,还有它的位置信息,词的文档频率,总的频率,这些信息被文档打分器提供文档分数的计算依据.
19.在Xapian中,如果你在索引的时候使用了TermGenerate来进行分词,那在查询的时候一定要使用QueryParser来对查询条件进行解析。