相关文章推荐
俊秀的盒饭  ·  ios kill 其他进程 ...·  1 年前    · 
儒雅的绿茶  ·  Python ...·  2 年前    · 

1. IR简介

   谈到xapian就得先提基本概念,xapian,lucene是什么?他们这些的本质就是**IR 信息检索(Information Retrieval)**的实现方式。再直白点就是你给我一个关键词,我给你从筛选出一堆你想要的文章。
   那就先聊聊信息检索的基本概念,首先我们拿到一篇文章就是要分词,也就是去掉无意义的词。
   举个例子:
   文件一:Students should be allowed to go out with their friends, but not allowed to drink beer.
   那么我经过分词得到词元(Token)如下:     “Students”,“allowed”,“go”,“their”,“friends”,“allowed”,“drink”,“beer”,“My”,“friend”,“Jerry”,“went”,“school”,“see”,“his”,“students”,“found”,“them”,“drunk”,“allowed”

而这些词中有很多再提取词干,如“cars”到“car”等,我们把提取的词干称之为term(词)。
常见的分词技术一般都是基于mmseg算法。常用的分词器有firso等。然后这些term和document之间会创建索引,大家可以想象为书籍的目录。之后的系列文章我会剖析xapian的源码,给大家聊xapian的c++架构包大家爽。

2. xapian的数据库文件结构

我谈的版本是xapian1.2.2版本是最新的稳定开发版本。
XAPIAN创建数据库后主要有如下7张表,相对而言前面三张表是重点 。
1. posting listtable 保存了被每一个term索引的document,实际上保存的应该是document在database中的Id,此Id是唯一的。
2. record table 保存了每一个document所关联的data,data不能通过query检索,只能通过document来获取。
3. term list table 保存了索引每个document的所有的term。
4. position listtable 保存了每一个Term出现在每一个document中的位置。
5. value table 保存了每一个document的values,values是用作保存、排序或其它作用的。
6. spellingtable 保存了拼写纠正的数据。
7. synonymtable 保存术语的字典,例如NBA、C#或C++等。

然后查询的时候,可以说是我知道了你给的term,我就能在posting listtable中查询到含有这个term的document的id。而决策出document的先后顺序,则有很多算法,例如BM25,BOOL算法等。具体的算法我并不谈,我主要是来谈xapian的C++代码的。

3.xapian的源代码目录和结构

1.下载源码在linux下,直接
./configue
make
make install(这步不成功也不用慌张,只要make没出错就行)
编译好后就会有
libxapian.a
libgetopt.a
libflintcheck.a 1.0V (1.0版本以后出现)
libchertcheck.a 1.2V (1.2版本以后出现)
libbrasscheck.a 1.4V (1.4版本以后出现)
上面第三步出错的同学,你在xapian的目录下输入ls -a然后看到了那个.lib文件夹了吧,把里面我提到的这几个库拷贝到你想拷贝的目录下就好了,程序link的时候指向你的那个目录就好了。
libflintcheck.a,libchertcheck.a ,libbrasscheck.a 分别是xapian的三种数据存储格式。
这里写图片描述
我们用的头文件在include文件夹下,即xapian.h,这个文件其实是一个总的头文件,里面引用了xapian各个模块的API。具体的API看官网帮助文档。
api目录下给的都不是实际代码的实现,只是一个架子,也就是你看的给你用的头文件直接对应的.cc。xapian使用了pimpl的设计模式,即实际做事的是类的一个私有成员,这个成员是一个类的指针也是一个接口类,用的C++多态实现了chert,barss,flint三种数据模式的切换。
C++功力不深的同学想研究xapian的实现,就直接看backends目录下的源码吧,这里面都是实际功能的实现。

XAPIAN简介(一)1. IR简介 谈到xapian就得先提基本概念,xapian,lucene是什么?他们这些的本质就是**IR 信息检索(Information Retrieval)**的实现方式。再直白点就是你给我一个关键词,我给你从筛选出一堆你想要的文章。 那就先聊聊信息检索的基本概念,首先我们拿到一篇文章就是要分词,也就是去掉无意义的词。 举个例子: 文件一:Stu 1.1 简介 Xapian是一个开源的搜索引擎库,它可以让开发者自定义的开发一些高级的的索引和查找因素应用在他们的应用中。 通过阅读这篇文档,希望可以帮助你创建第一个你的索引数据库和了解一些基本概念,并提供了了代码作为参看。 如果你已经安装了Xapian,并且只想看实例代码,可以跳过 “Xapian-核心概念”章节,直接到 “Xapian-Hello World”。...
XAPIAN学习1--倒排数据(库)建立,工厂模式应用 选择xapian是因为xapian的代码可读性更强,更接近现代C++风格,用户端代码很少需要直接和指针打交道而看了下lemur示例代码到处都是指针不太爽,呵呵,还是了解不多吧,总之从xapian开始吧。 xapian的索引建立 xapian提供多种不同的索引方式比如in memory, flnt格式的等待(具体没有仔细看)
1.   Xapian的官方网站是http://www.xapian.org,是一个非常优秀的开源搜索引擎项目,搜索引擎其实只是一个通俗的说法,正式的说法其实是IR(Information Retrieval)系统。 2.   Xapian的License(版权许可证)是GPL,意味着允许使用者自由地修改其源码并发布之。Xapian允许开发人员添加高级索引和搜索功能到他们的应用系统。
  关键字:搜索引擎、Xapian   一篇拖了两三年的入门总结文章,今天发出来,一方面是自己的总结,另一方面是给自己和他人的备忘。读者需要对搜索引擎有初步了解,譬如了解倒排、term、doc、相似度打分等概念。 Xapian是一个C++搜索引擎内核,提供了类似Lucene的功能,功能没有Lucene丰富,但可以满足常见的搜索需求:倒排检索、与或非查询、相关性打分排序等。 这是什么? 该项目旨在利用团队的努力,提供一种直接,简单且免维护的为配置FTS插件的。 在Dovecot团队决定弃用dovecot核心中包含的“ fts_squat”之后,并且由于Solr插件功能的复杂性(大多数用户都不需要),才做出了这一努力。 您需要执行以下操作来实现此目的: * Dovecot 2.2.x (or above) * Xapian 1.4.x (or above) * ICU 60.x (or above) 您将需要在dovecot配置中正确配置 。 安装Dovecot插件 首先安装以下软件包,或与您的操作系统等效的软件包。 Ubuntu: apt-get build-dep dovecot-core apt-get install dovecot-dev apt-get install git xapia
该网站将在后台编入索引。 要执行搜索: query = request[:query] || "" search = Xapian::Rack.get(request.env) results = Xapian::Rack.find(request.env, query, {:options => Xapian::Qu
Xapian基础 Xapian和Omega是独立的组件,旨在共同提供索引和搜索功能。 Xapian组件提供了数据库功能(用于存储信息)的核心,以及用于查找单词和单词组合的搜索和检索系统(请参阅参考资料 )。 Omega组件提供了将信息从各种格式转换和解析为Xapian所需的原始文本的工具,以便可以对其进行索引。 Omega利用多种工具(例如pdftotext ,然后提交经过翻译和过滤的...
在项目中为了支持搜索服务,我们使用xapian作为后端的搜索引擎.其因性能良好以及易用受到大家欢迎.下面是基本代码: [code="python"] import xapian import posixpath def get_db_path(): XAPIAN_ROOT = '/tmp/' xapian_user_database_path = posixpath...
mu 1.1.0a1是Python编程语言的一个开源项目,是一个邮件客户端和垃圾邮件过滤器。它是为了提供一个简洁、高效和易于使用的邮件工具而开发的。 mu 1.1.0a1具有以下特点: 1. 邮件索引和搜索功能:它使用Xapian搜索引擎来构建邮件索引,使用户可以快速且准确地搜索邮件内容。 2. 快速的邮件过滤和标记:mu提供了强大的垃圾邮件过滤功能,可以自动将垃圾邮件标记为垃圾,避免用户收到不必要的邮件。 3. 批量处理和操作:用户可以使用mu进行批量处理和操作邮件,如删除、标记、移动等。 4. 定制化和扩展性:mu提供了多种自定义配置选项,用户可以根据自己的需求来配置和扩展邮件客户端的功能。 5. 跨平台支持:mu可以在不同的操作系统上运行,如Linux、Mac OS和Windows等。 总的来说,mu 1.1.0a1是一个功能强大且灵活的邮件客户端和垃圾邮件过滤器,它的目标是提供给用户一个简单、高效和可扩展的邮件工具,以便更好地管理和处理邮件。