Tag Archives: Xapian

Xapian压缩数据库

压缩数据库可以减小数据库体积,提高检索性能。

基本,我们用-F(如果你之后不准备再更新数据库了)和-b 16KB(一般来说,Block Size越大,越高效)

 注:如果你的Database是通过间断Update进去的。即多次commit进去的。那么上述压缩会非常有用。以我的情况为例:100万文档,分50次建的索引,索引压缩前,对于DF大的Query经常在3[……]

继续阅读

学习Xapian(4) – Faceting Search(Filter / 过滤)

在信息检索中,有一类任务叫做Faceting Search,在Wikipedia中的定义如下:
Faceted search, also called faceted navigation or faceted browsing, is a technique for accessing a collection of information represented using a faceted classification, allowing users to explore by fil[……]

继续阅读

学习Xapian(3) – 同义词的查询拓展

Xapian支持同义词的查询拓展。
按照同义词进行拓展算是查询拓展最基本的一种方式。
比如“汽车展览”“车展”是同义词,我们搜索汽车展览的时候,也会把“车展”的结果返回。
很多人认为这个就是拼写校正,但实际它比拼写校正稍微高级点,特别是放在Xapian的语境下,毕竟拼写校正是基于编辑距离而不是语义的。

1、在DB写入同义词组
创建同义词组的API很简明。
WritableDatabase::add_synonym(term, synonym)
这一对同义词是有方向的,term[……]

继续阅读

学习Xapian(2) – 拼写校正

Xapian提供了拼写校正功能,其基本算法就是编辑距离,只不过它支持UTF-8,也就是说是支持中文的。

1、建立拼写校正辞典

虽然编辑距离的算法很土很原始,但是Xapian提供了方便的接口建立辞典,至少有如下两种方式:
(1)Xapian::WritableDatabase.db.add_spelling(word, freq)
word就是正确的词,freq是出现频率,默认是1。
频率的作用是这样的,如果对于一个词比如篮球和蓝球,前者add了4次,后者出现了3词,那么当对”兰[……]

继续阅读

学习Xapian(1) – 基础的建索引和搜索

前言:

Xapian是一款开源的C++信息检索系统,提供了非常强大的功能。

国人喜欢跟风,收到某宴的影响,国人一直推崇Sphinx:与MySQL深度集成,开箱即用,非常傻瓜。但是它定制起来非常的麻烦,就连最基础的中文分词都要改好多地方才能实现。

与市面上其他的信息检索相比,Xapian类似于Lucene,提供丰富、可拓展的编程接口,让Xapian能够更好的融入你的系统中。同时,他的检索性能又远远高于Lucene,并采用BM-25模型,具有更好的检索效果。

至于大家最关心的[……]

继续阅读