`
king_c
  • 浏览: 225603 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用Xapian构建自己的搜索引擎:Xapian简介

阅读更多

Xapian与开源

Xapian的官方网站是http://www.xapian.org,这是一个非常优秀的开源搜索引擎项目,搜索引擎其实只是一个通俗的说法,正式的说法其实是IRInformation Retrieval)系统。XapianLicenseGPL,这意味着允许使用者自由地修改其源码并发布之。Xapian的中文资料非常少,可以说现在互联网上连一篇完整详细的Xapian中文介绍文档,更别说中文API文档了。其实,Xapian的英文资料也不多,除了官方网站上的DocsWiki外,还有一些网站上的邮件列表,在这方面跟Lucene没得比。当然,Lucene现在已经发展到2.x版本了,而Xapian的最新版本才1.012,国外开源项目一般对版本号控制得比较严格,一个项目一般到了1.x才算稳定和成熟的。

Xapian可以运行在那些平台?

XapianC++编写,但可以绑定到Perl, Python, PHP, Java, Tcl, C# Ruby甚至更多的语言,Xapian可以说是STL编程的典范,在这里您可以找到熟悉的引用计数型智能指针、容器和迭代器,甚至连命名也跟STL相似,相信一定能引起喜好C++STL的你的共鸣(实际上,很少C++程序员完全不使用STL)。由于Xapian使用的是STLC运行时库,因此具有高度可移值性,官方说法是可以运行在Linux Mac OS X FreeBSD NetBSD OpenBSDSolaris,HP-UX,Tru64IRIX,,甚至其它的Unix平台,在Microsoft Windows上也跑得很好。当然,并不能像Java那样“一次编译,到处可以运行”,当移植到其它平台时,一般来说是需要重新编译的。至于如何在Windows32位系统下编译Xapian,请查阅我以前写的文章《nmakewindows平台下编译xapian》。

Xapian的特性

依官方的说法,Xapian是一个允许开发人员轻易地添加高级索引和搜索功能到他们的应用系统的高度可修改的工具,它在支持概率论检索模型的同时也支持布尔型操作查询集。

从功能特性上来说。XapianLucene有点相似,两者都具有TermValue(在Lucene里称为SortField)、PostingPositionDocument,不过Xapian没有Field的概念,这直接导致Xapian在使用上比Lucene麻烦了那么一点。但这完全不是问题,通过一些小技巧,完全可以自己在Xapian中实现Filed的概念。在Lucene里还有一个叫Payload的元素,即词条 (Term) 的元数据或称载荷。举一个例子,“回家吃饭吧”和“快回家吃饭”这两个句子都带有“吃饭”这个词语,但在检索的时候怎样才能将语气表达出来呢?虽然可以添加Term来解决这个问题,但由于Term的索引信息和存储信息是分开放的,相对来说I/O性能较差,Payload就是应这个问题而生的,因为Payload信息是直接放在索引里的。由于对Xapian的研究还不是很深,Xapian里是否有类似Payload这个概念,还需要继续研究。

Xapian与搜索

搜索的目的是将结果数据展现给终端用户,搜索引擎与普通的数据库查询最大的区别就在于查询。Xapian提供了多种的查询机制。

  • 概率性搜索排名 重要的词语会比不那么重要的词语得到更多的权重,因此与权重高的词语关联的Documents会排到结果列表的更前面。
  • 相关度反馈 通过给予一个或多个Documents, Xapian可以显示最相关的Terms以便扩展一个Query,及显示最相关的Documents
  • 词组和邻近搜索 -- 用户可以搜索一个精确短语或指定数组的词组。
  • 全方位的布尔型搜索器,例如 ("stock NOT market", etc)
  • 支持提取搜索关键字的词干,例如当搜索“football”的时候,当Documents中含有"footballs" "footballer"的时候也被认作符合。这有助于找到相关结果,否则可能错过之。词干提取器现在支持DanishDutch English Finnish French German HungarianItalian NorwegianPortugueseRomanian RussianSpanishSwedishTurkish
  • 支持通配符查询,例如“xap*”。
  • 支持别名查询,打个比方,C++会自动转为CPlusPlusC#则自动转为CSharp
  • Xapian支持拼写纠正,例如xapian会被纠正为xapain,当然这必须基于词组已经被索引了。这特性跟Google提供的“你是不是想搜索xxx”有点相似。

Xapian的存储系统

Xapian现在的版本默认是使用flint作为存储系统,flint是以块的形式来存储,默认每块是8K,理论上每一个文件最大可以达到2048GB。当然,在旧式的文件系统,例如FAT/FAT32是不可能实现的。熟悉Windows内存管理机制的朋友一定知道使用Windows32位系统每个进程的总虚拟地址空间只有4GB,而用户模式连2GB都不够(Windows2003可以将用户模式扩展到3GB左右),因此应用程序不可能一次过将整个Database文件读取到内存中,通常的做法是使用内存映射文件,先预订地址空间,在真正使用的时候才调拨内存,而内存分页粒度是4k,也就是说内存中每一页是4k,而在IA64系统中,内存分页粒度是8k。在内存中,除了页外,还有区块,X86IA64的内存区块的粒度都是64kXapian这样存储数据估计是为了在各个平台上都能实现数据对齐,数据对齐对于cpu运算寻址是非常重要的,而864都是4的倍数,因此大胆猜想Xapian8k作为存储系统的默认块大小是为了在性能和兼容性中取得最平衡和最优值。

Xapian使用unsigned 32-bit ints作为Documentsid值,因此在每个XapianDatabase中,最多可容纳40亿个Documents。而XapianTermsDocuments都是使用B-树来存储的,其实很多数据库系统(这里所指的是关系数据库)的索引都是用B-树或B+树来存储的,具有增删改查比较方便迅速的特点,缺点则是如果索引被删除后的空间不能重复利用,为了提高性能,通常要经常重建索引。

Xapian的性能

搜索引擎的性能是用户非常关心的一部分,Xapian的性能如何?官方的原话如下:The short answer is "very well" - a previous version of the software powered BrightStation's Webtop search engine, which offered a search over around 500 million web pages (around 1.5 terabytes of database files). Searches took less than a second.。在5亿个网页共1.5TB大小的文件中,搜索只需要小于一秒就完事了。当然,这跟运行的平台和机器是密切相关,在我们自己构建好Xapian搜索引擎应用后,我们也可以测测具体的速度。

Xapian的绝佳范例

Xapian的官方网站上有一个绝佳的使用范例,这个称为Omega的项目甚至可以开箱即用作为一个CGI应用程序。Omega附带了OmindexScriptIndex这两个索引生成工具,可以将硬盘上的htmlpdf,图片甚至视频影片索引起来并生成Database通过操作这些由OmindexScriptIndex生成的DatabaseOmega提供了搜索这些文件的功能。

关于《利用Xapian构建自己的搜索引擎》系列

在使用Xapian的过程中,我一般是查阅http://www.xapian.org/docs/上的DocAPI DocWiki,遇到困难时则查阅Omega的源代码并互相印证之。实在没办法的时候只能从Google上找找一些网站的邮件列表,可以说是磕磕碰碰地将Xapian的大部分功能玩了一遍。有一些专有名词我虽然知道大概意思,但无法准确地翻译出来,因此《利用Xapian构建自己的搜索引擎》这一系列的内容可能会错漏百出。不过如果这一系列文章可以引起大家对Xapian的兴趣,它所得到的批评才是它最大的价值。

在后续文章中,我会从XapianDatabase开始一步一步构建搜索引擎应用,并配以自己的理解,请大家一起讨论。

由于工作原因,一般只有晚上才有时间写文章,在写的过程中还要不断印证自己的想法是否正确,免得经常作无谓猜测而导致欠缺严谨性,因此不能保证每天都能更新,请大家见谅。

更多关于Xapian的详细信息,或者下载地址请点这里

分享到:
评论

相关推荐

    细细品味架构·基于Xapian的垂直搜索引擎的构建分析(第2期)

    2.2 搜索引擎的检索模型-查询与文档的相关度计算 2.2.1 检索模型概述 2.2.2 检索模型分类 2.2.3 布尔模型 2.2.4 向量空间模型 2.2.5 概率模型 2.2.6 语言模型 2.2.7 机器学习排序算法 2.3 BloomFilter–大规模数据...

    cpp-Xapiand一个基于Xapian的RESTful搜索引擎

    **Xapiand** 是一个基于 **Xapian** 库构建的现代、快速且易于使用的 RESTful 搜索引擎。这个项目旨在提供一个轻量级、高效且高度可配置的解决方案,用于索引和搜索大量数据。它允许通过 HTTP 接口与服务器进行交互...

    xapian_doxygen_win

    Xapian是一个强大的开源全文搜索引擎库,专为高效的信息检索设计。它由C++编写,提供了丰富的API供开发者在各种应用程序中集成全文搜索功能。Xapian的核心特性包括高效的倒排索引、多字段搜索、模糊匹配、同义词支持...

    C++开源搜索引擎xapian开发入门demo

    C++开源搜索引擎Xapian是一个高效、可扩展的库,专为全文搜索和信息检索设计。本篇将介绍如何入门Xapian的开发,带你了解其核心概念、安装过程、基本用法以及如何通过C++接口进行操作。 首先,Xapian的核心特性包括...

    基于Xapian站内检索的设计与实现

    基于Xapian构建站内检索的关键步骤包括: 1. **文档分析**:对输入的文档进行预处理,提取关键词汇。 2. **索引构建**:根据提取的关键词汇构建索引。索引包括文档ID、关键词汇及其出现频率等信息。 3. **查询处理*...

    python xapian 简单应用

    **Python Xapian 简单应用** ...通过理解索引和查询的工作原理,以及如何利用Xapian的特性,我们可以创建出满足各种需求的全文搜索引擎。无论是个人项目还是企业级应用,Xapian都是一个值得考虑的选择。

    xapian的使用

    Xapian是一个强大的开源搜索引擎库,它被广泛用于全文搜索、文档检索以及相似度计算等任务。本教程将深入探讨如何使用Xapian,并通过一个实际的“writedatabase”示例帮助你理解其核心概念和操作流程。 首先,我们...

    xapian_text_index

    《Xapian文本索引库在C++中的应用详解》 Xapian是一个高效、可扩展的全文搜索引擎库,尤其适合于大型文本数据的检索...掌握这些技能后,你将有能力构建自己的全文搜索引擎,为大数据时代的信息检索提供高效解决方案。

    Xapian-1.2.22 windows下编译

    Xapian是一个强大的全文搜索引擎库,因其高效、可扩展和高度可定制的特性而在信息检索领域广泛应用。然而,对于Windows平台的开发者来说,Xapian的官方支持并不像在Linux或Unix系统那样完善。在这种情况下,我们需要...

    开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.docx

    这些开源工具包不仅降低了构建搜索引擎的门槛,还鼓励创新和社区协作。它们为开发者提供了自由度,可以根据具体需求定制搜索解决方案,广泛应用于各种Web应用程序、内容管理系统、知识库系统以及大数据分析等领域。...

    PHP搜索引擎

    在提供的压缩包文件中,"访问阿里西西WEB开发社区.html"可能是关于如何在阿里西西(alixixi.com)这个Web开发社区中利用PHP构建搜索引擎的教程或者案例。这个社区可能提供了相关教程、代码示例或讨论,帮助开发者...

    如何使用C#在Windows上编译和使用Xapian

    在Windows平台上使用C#编译和使用Xapian搜索引擎是一个技术性的任务,涉及到多个步骤和注意事项。Xapian是一款开源的信息检索库,它提供高效、灵活的全文搜索和相关性排名功能。以下是一些关键知识点: 1. **C#与...

    acts_as_xapian:Xapian全文搜索插件,适用于Ruby on Rails

    《acts_as_xapian:为Ruby on Rails打造的Xapian全文搜索引擎插件》 在Web开发领域,全文搜索引擎能够极大地提升用户对信息的检索效率,对于内容丰富的应用尤其重要。Ruby on Rails作为流行的Web框架,有着众多的...

    开源的搜索引擎工具包和web搜索引擎系统 - austin lius fashion - 博客园.pdf

    4. Xapian:Xapian是一个用C++编写的搜索引擎开发库,提供了多种语言的绑定,包括Perl、Python等。Xapian强调高适应性和概率检索模型,支持布尔查询操作。它的核心组件xapian-core和绑定组件xapian-bindings为开发者...

    python分布式爬虫打造搜索引擎

    Python分布式爬虫是现代网络数据抓取的重要工具,尤其在构建搜索引擎时,其高效的数据获取能力至关重要。在本文中,我们将深入探讨如何利用Python技术来搭建一个分布式爬虫系统,并逐步构建一个简单的搜索引擎。 ...

    搜索引擎技术教程 网络搜索引擎原理-第1章 简介 共21页.pptx

    ### 搜索引擎技术教程知识点概览 ...- **第七章**:介绍Xapian搜索引擎的使用和配置。 通过以上章节的学习,读者可以深入了解搜索引擎的核心技术和应用实践,为从事相关领域的研发工作打下坚实的基础。

    PHP搜索引擎.rar

    4. **PHP扩展**:可以利用`Xapian`、`Sphinx`或`Elasticsearch`等PHP扩展来增强搜索引擎功能,它们提供了成熟的全文检索引擎接口。 5. **用户界面**:构建友好的搜索表单和结果显示页面,使用AJAX异步提交搜索请求...

    开源搜索网站开源搜索网站

    开源搜索网站是基于开放源代码技术构建的搜索引擎,它们允许用户访问、查看、修改和贡献其源代码,促进了技术的共享与创新。开源搜索引擎通常由全球开发者社区共同维护,为用户提供自定义、可扩展和高度可配置的搜索...

    zettair C开源搜索引擎

    **Zettair:C语言构建的开源全文搜索引擎** Zettair是一款用C语言编写的开源搜索引擎,它提供了对文本、图像以及二进制文件的全面索引和检索能力。作为一个轻量级且高效的搜索解决方案,Zettair适用于各种场景,...

    Python库 | django-haystack-1.2.4.tar.gz

    `django-haystack` 是 Django 的一个搜索库,它抽象出多个全文搜索引擎的接口,如 Elasticsearch、Solr、Whoosh、Xapian 等。Haystack 提供了一套 Django 风格的 API,使得在 Django 应用中实现复杂和高性能的搜索...

Global site tag (gtag.js) - Google Analytics