Sphinx是一款开源全文搜索服务器,从性能、相关性(也称为搜索质量)和集成简单性的角度设计。它是用C++编写的,适用于Linux(RedHat,Ubuntu等)、Windows、MacOS、Solaris、FreeBSD等,和其他一些系统。
Sphinx允许您批量索引和搜索存储在SQL数据库,NoSQL存储器中的数据,或只是文件快速轻松地 - 或者即时索引和搜索数据,与Sphinx一样,与数据库服务器一样。
各种文本处理功能使您可以根据您的特定应用需求对Sphinx进行微调,并且还可以使用许多相关功能来调整搜索质量。
通过SphinxAPI进行搜索与3行代码一样简单,通过SphinxQL查询更简单,搜索查询以良好的旧SQL表达。
Sphinx集群每天可以扩展到数百亿个文档和数亿个搜索查询,为Craigslist, Living Social, MetaCafe 和 Groupon等顶级网站提供支持,欲查看已知用户的完整列表,请访问我们的Powered-by 页面 。
最后但并非最不重要的是,它是根据GPLv2许可的。
性能和可扩展性
索引性能。 Sphinx每个CPU内核每秒最多可以提取10-15 MB的文本,即每个服务器(专用的索引机器)为60+ MB /秒。
搜索性能。通过在具有2GB RAM的双核台式机上搜索我们用于日常开发和测试的1,000,000个文档,1.2 GB文本集合,以500多个查询/秒运行。
可扩展性。最大的已知Sphinx集群索引超过25亿个文档,并因此积累了超过9TB的数据。最著名的一个是Craigslist,每天提供3亿次搜索查询。
主要特征
- 批量和实时全文索引。两个索引后端支持有效的脱机索引构建和增加的即时索引更新。
- 非文本属性支持。任意数量的属性(产品ID,公司名称,价格等)可以存储在索引中,仅用于检索(以避免命中数据库)或用于高效的Sphinx侧搜索结果集后处理。
- SQL数据库索引。 Sphinx可以直接访问和索引存储在MySQL中的数据(支持所有存储引擎),PostgreSQL、Oracle、Microsoft SQL Server、SQLite、Drizzle以及支持ODBC的任何其他数据。
- 非SQL存储索引。数据也可以以称为XMLpipe的简单XML格式流式传输到批量索引器,或直接插入增量RT索引。
- 轻松应用集成。Sphinx配有三种不同的API,SphinxAPI、SphinxSE和SphinxQL。 SphinxAPI是可用于Java、PHP、Python、Perl、C和其他语言的本地库。 SphinxSE是MySQL的可插拔存储引擎,可将巨大的结果集直接发送到MySQL服务器进行后期处理。 SphinxQL允许应用程序使用标准的MySQL客户端库和查询语法查询Sphinx。
- 高级全文搜索语法。sphinx的查询引擎支持结合布尔运算符、短语、邻近度、严格顺序和仲裁匹配,字段和位置限制,精确关键字形式匹配,子字符串搜索等的任意复杂查询。
- 丰富的数据库式查询功能。sphinx不限制您进行关键字搜索。在全文搜索结果集之上,您可以计算任意算术表达式,添加WHERE条件,执行ORDER BY,GROUP BY,使用MIN/MAX/AVG/SUM,聚合等。本质上,支持全面的SQL SELECT。
- 更好的相关性排名。与许多其他引擎不同,sphinx不单靠只考虑关键词频率的30年间的统计排名,也不会限制你。默认情况下,sphinx进一步分析了关键词的邻近度,并将更接近的短语匹配排名,完美匹配排名在顶部。此外,排名是灵活的:您可以选择一些内置的相关功能,通过使用表达式来调整权重,或开发新的。
- 灵活的文本处理。sphinx索引功能包括对SBCS和UTF-8编码的全面支持(意味着有效地支持所有世界语言);停用词消除和可选的命中位置移除(无缝索引);通过词形词和词干进行词法和同义词处理;例外和混合字符;还有很多。
- 分布式搜索搜索可以分布在多台机器上,实现横向横向扩展和HA(高可用性)。