CoreSeek/Sphinx简介

1.1. 什么是CoreSeek/Sphinx

logo.png

Sphinx是一个在GPLv2下分发的全文检索引擎;Coreseek 是一个可供企业使用的、基于Sphinx(可独立于Sphinx原始版本运行)的中文全文检索引擎,按照GPLv2协议发行。商业使用(例如, 嵌入到其他程序中)需要联系我们以获得商业授权。

一般而言,Sphinx是一个独立的全文搜索引擎;而Coreseek是一个支持中文的全文搜索引擎,意图为其他应用提供高速、低空间占用、高相关度结果的中文全文搜索能力。CoreSeek/Sphinx可以非常容易的与SQL数据库和脚本语言集成。

应用程序可以通过三种不同的接口方式来与Sphinx搜索服务(searchd)通信: a) 通过原生的搜索 API (SphinxAPI), b) 通过Sphinx自身支持的MySQL网络协议 (使用命名为SphinxQL的SQL精简子集), 或者 c) 通过MySQL 服务端的存储插件引擎(SphinxSE)。当然, 还可以通过可以使用 a)、b)、c) 的应用程序来构建webservice来为其他应用程序提供通信

在Sphinx发行版本中提供的原生搜索API支持PHP、Python、Perl、Rudy和Java。搜索API非常轻量化,可以在几个小时之内移植 到新的语言上。第三方API接口和插件提供了对Perl、C#、Haskell、Ruby-on-Rails支持,以及对其他可能的语言或者框架的支持。

从版本1.10-beta开始,Sphinx支持两种不同的索引后端:“磁盘(disk)”索引后端和“实时索引(realtime)”(RT)索引后 端。磁盘索引支持在线全文索引重建,但是仅支持非文本(属性)数据的在线更新。RT实时索引在此基础上,又增加了在线的全文索引更新。在此之前的版本仅支 持磁盘索引。

使用命名为数据源的接口,数据可以被加载到磁盘索引。当前系统内置MySQL和PostgreSQL以及ODBC兼容(MS SQL、Oracle等) 数据库数据源的支持,也支持从管道标准输入读取特定格式的XML数据。通过适当修改源代码,用户可以自行增加新的数据源驱动(例如:对其他类型的DBMS 的原生支持)。在Coreseek发行的版本中,用户还可以使用Python脚本作为数据源来获取任何已知世界和未知世界的数据,这极大的扩展了数据源的 来源。从1.10-beta版本开始的RT实时索引,只能使用MySQL接口通过SphinxQL来操作。

Sphinx 是SQL Phrase Index的缩写,但不幸的和CMU的Sphinx项目重名。

Coreseek (http://www.coreseek.cn/) 为Sphinx在中国地区的用户提供支持服务,如果您不希望纠缠与琐碎的技术细节,请直接联系我们。

本参考手册基于Sphinx 2.0.1-beta最新文档,可能存在潜在的翻译错误,如果您发现本文的翻译错误,请联系我们。

我们的联系方式: coreseek@gmail.com  李沫南(nzinfo) honestqiao@gmail.com  乔楚(HonestQiao 13581882013)

1.2. CoreSeek/Sphinx 的特性

Sphinx 的主要特性:

  • 索引和搜索性能优异;

  • 先进的索引和查询工具 (灵活且功能丰富的文本分析器,查询语言,以及多种不同的排序方式等等);

  • 先进的结果集分析处理 (SELECT 可以使用表达式, WHERE, ORDER BY, GROUP BY 等对全文搜索结果集进行过滤);

  • 实践证实可扩展性支持数十亿文档记录,TB级别的数据,以及每秒数千次查询;

  • 易于集成SQL和XML数据源,并可使用SphinxAPI、SphinxQL或者SphinxSE搜索接口

  • 易于通过分布式搜索进行扩展

Sphinx 的详细特性:

  • 高速的索引建立(在当代CPU上,峰值性能可达到10 ~ 15MB/秒);

  • 高性能的搜索 (在1.2G文本,100万条文档上进行搜索,支持高达每秒150~250次查询);

  • 高扩展性 (最大的索引集群超过30亿条文档,最繁忙时刻的查询峰值达到每天5千万次);

  • 提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法;

  • 支持分布式搜索功能;

  • 提供文档片段(摘要以及高亮)生成功能;

  • 内建支持SphinxAPI和SphinxQL搜索箭口,也可作为MySQL的存储引擎提供搜索服务;

  • 支持布尔、短语、词语相似度等多种检索模式;

  • 文档支持多个全文检索字段(缺省配置下,最大不超过32个);

  • 文档支持多个额外的属性信息(例如:分组信息,时间戳等);

  • 支持查询停止词;

  • 支持词形学处理;

  • 支持特殊词汇处理;

  • 支持单一字节编码和UTF-8编码;

  • 内建支持英语、俄语、捷克语词干化处理; 对 法语,西班牙语,葡萄牙语,意大利语,罗马尼亚语,德国,荷兰,瑞典,挪威,丹麦,芬兰,匈牙利等语言 的支持可通过第三方的 libstemmer 库 建立);

  • 原生的MySQL支持(同时支持MyISAM 、InnoDB、NDB、Archive等所有类型的数据表 );

  • 原生的PostgreSQL 支持;

  • 原生的ODBC兼容数据库支持 (MS SQL, Oracle, 等) ;

  • ...多达50多项其他功能没有在此一一列出,请参阅API和配置手册!


1.3. 如何得到CoreSeek/Sphinx

Sphinx原始版本可以从Sphinx官方网站 sphinxsearch.com/,Coreseek可以从Coreseek官方网站 www.coreseek.cn/下载。

目前,CoreSeek/Sphinx的发布包包括如下软件:

  • indexer: 用于创建全文索引;

  • search: 一个简单的命令行(CLI) 的测试程序,用于测试全文索引;

  • searchd: 一个守护进程,其他软件(例如WEB程序)可以通过这个守护进程进行全文检索;

  • sphinxapi: 一系列searchd 的客户端API 库,用于流行的Web脚本开发语言(PHP, Python, Perl, Ruby, Java).

  • spelldump: 一个简单的命令行工具,用于从 ispell 或者 MySpell(OpenOffice内置绑定) 格式的字典中提取词条。当使用 wordforms时可用这些词条对索引进行定制.

  • indextool: 工具程序,用来转储关于索引的多项调试信息。此工具是从版本Coreseek 3.1(Sphinx 0.9.9-rc2)开始加入的。

  • mmseg: 工具程序和库,Coreseek用于提供中文分词和词典处理。


1.4. 许可协议

这一程序是自由软件,你可以遵照自由软件基金会出版的GNU通用公共许可证条款来修改和重新发布这一程序。或者用许可证的第二版,或者(根据你的选择)用任何更新的版本。请查看COPYING文件了解详情。

发布这一程序的目的是希望它有用,但没有任何担保。甚至没有适合特定目的的隐含的担保。更详细的情况请参阅GNU通用公共许可证。

你应该已经和程序一起收到一份GNU通用公共许可证的副本。如果还没有,写信给: The Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

非GPL许可(为OEM/ ISV的嵌入式应用)也可以安排,国际客户请联系Sphinx 、中文客户请联系Coreseek以讨论商业授权的可能性与细节。

1.5. 作者和贡献者

作者

Sphinx 的最初作者 (诞生以来的主要开发者):


Sphinx 的团队

Sphinx技术公司参与过或正在参与Sphinx开发的工作人员(按照字母排序):

  • Alexander Klimenko

  • Alexey Dvoichenkov

  • Alexey Vinogradov

  • Ilya Kuznetsov

  • Stanislav Klinov


Coreseek 的团队

Coreseek 参与CoreSeek/Sphinx开发的工作人员:

贡献者

为Sphinx的开发出过力的人员和他们的贡献如下(以下排名不分先后):

  • Robert "coredev" Bengtsson (Sweden), 贡献了PostgreSQL数据源的初始版本

  • Len Kranendonk, Perl API

  • Dmytro Shteflyuk, Ruby API

  • blueflycn, sphinx-for-chinese,另一个支持MMSEG中文分词的个人发布版本


此外,还有许多人提出了宝贵的想法、错误报告以及修正。在此一并致谢!对CoreSeek/Sphinx所采用依赖和工具软件的作者,在此也表示由衷的感谢与敬意。

1.6. 历史

Coreseek 的开发工作类似Sphinx(起始于2001年),可以上溯到2006年(Sphinx于该年开始对外提供),那时我们试图为一个数据库驱动的网站寻找一 个可接受的中文搜索的解决方案,但是当时没有任何方案能够完全而又直接的满足要求。事实上,主要是如下问题:

  • 搜索质量(例如:类似Google的有效的相关度算法)

    • 单纯的统计学方法的效果非常糟糕,特别是在大量的短篇文档的集合上,例如:论坛、博客等等

  • 搜索速度

    • 特别是当搜索的短语包括“停止词”时,表现的尤其明显,例如:英文("to be or not to be")、中文(“我的你的他的”)

  • 建立索引时,磁盘IO和CPU消耗需要可控

    • 在共享的主机环境中,这一点的重要性更甚于索引速度

  • 中文搜索的准确性和效率

    • 因为众所周知的原因,只有准确的中文分词才能提高中文搜索的准确性,并大大降低计算量.


通过网络,我们还了解到有无数的人存在类似的需求,但是没有一款真真合适的工具来解决这个问题。尔后我们进行了不同途径的探索,尝试了不同 的方法,经过了反复的实践,幸运的是我们找到了Sphinx,最终选择基于Sphinx、结合MMSeg,开发出Coreseek中文全文检索引擎,并按 照GPLv2协议发行,以供企业和个人解决中文搜索问题。

随着时间的流逝,其他的解决方案有了很多改进,新的方案也不断涌现,但是,我们一致认为仍然没有一种解决方案是足够的好,以至于能让我们抛弃Sphinx将搜索平台迁移过去。

近年来,CoreSeek/Sphinx的用户给了我们很多正面的反馈和建议,我们也不断改进和提高,提供了新的实时索引,并增加了Python数据源, 将CoreSeek/Sphinx的应用范围从已知世界扩展到未知世界,其应用场景也达到无限种可能;因此,显而易见的,CoreSeek/Sphinx 的开发过程将会继续(也许将持续到世界末日)。