Xapian源码研究报告(一)——Xapian的基本概念
1.api目录下的.cc和include目录下的.h-文件是成对的,即include下提供了对面的使用的类。Api目录下给出该类的的实现。不过这些实现都不是真正的做事的地方。
4.matcher文件下提供了查询时get_mset下用到的类,该文件夹下类大多继承于 Xapian::PostingIterator::Internal,通过Query的参数OP,决定实例化哪个子类。
5.net文件夹下主要是封装了网络通信类。
6.queryparser文件夹主要是queryparser类。
7.weight主要是计算term的rank方式计算的类。
8.Unicode字符串字符编码处理的类。
在xapian的主要功能类中,大多有类似这样的结构:
classXAPIAN_VISIBILITY_DEFAULT Database
{
public:
class Internal;
std::vector<Xapian::Internal::RefCntPtr<Internal>> internal;
}
主要是EfficvateC++中介绍的PIMPL的设计模式,Internal类继承于RefCntBase,xapian自己实现了一个带引用计数的智能指针,这个私有类指针的使用使代码的声明与实现分离,提高了类的封装以及代码的编译速度。降低了代码的耦合。而代码中真正的实现在Internal类,而这个类在Xapin很多时候被写成了抽象类,在这个类多被brass,chert,flint这三种存储模式下的各种功能类继承。Inmemory的存储方式我不明说,可以说代码主要做事的部分就在这些子类。
值得提一下的是,flint后端早在1.0版本出现,Chert后端早在1.2版本出现,brass后端早在1.4版本出现。
相关文章