Sphinx Search全文搜索引擎
Sphinx 是一个开源的全文搜索服务器,从头开始设计时就考虑到了性能、相关性(又名搜索质量)和集成的简单性。它是用 C++ 编写的,适用于 Linux(RedHat、Ubuntu 等)、Windows、MacOS、Solaris、FreeBSD 和其他一些系统。
Sphinx 让你可以快速轻松地批量索引和搜索存储在 SQL 数据库、NoSQL 存储或文件中的数据,或者即时索引和搜索数据,使用 Sphinx 就像使用数据库服务器一样。各种文本处理功能可以根据你的特定应用程序要求微调 Sphinx,并且许多相关功能确保你也可以调整搜索质量。
通过SphinxAPI进行搜索只需3行代码,而通过SphinxQL进行查询则更简单,搜索查询可以用古老的SQL来表达。Sphinx 集群每天可扩展到数百亿个文档和数亿个搜索查询,其目前已为 Craigslist、 Living Social、 MetaCafe和 Groupon等顶级网站提供了支持。
性能和可扩展性
- 索引性能。Sphinx 每个 CPU 内核每秒索引高达 10-15 MB 的文本,即每台服务器 60+ MB/秒(在专用索引机器上)。
- 搜索性能。搜索我们用于日常开发和测试的 1,000,000 个文档、1.2 GB 的文本集合,在具有 2 GB RAM 的 2 核台式机上以 每秒 500 多个查询的速度运行。
- 可扩展性。已知最大的 Sphinx 集群索引25+ 十亿个文档,产生超过 9TB 的数据。最繁忙的知名网站是 Craigslist ,每天提供300+ 百万次搜索查询。
主要特征
- 批处理和实时全文索引。支持高效离线索引构建和增量即时索引更新的两个索引后端可用。
- 非文本属性支持. 任意数量的属性(产品 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 并不局限于关键字搜索。在全文搜索结果集之上,可以计算任意算术表达式,添加WHERE条件,做ORDER BY,GROUP BY,使用MIN/MAX/AVG/SUM,聚合等。本质上是支持成熟的SQL SELECT。
- 更好的相关性排名。与许多其他引擎不同,Sphinx 并不完全依赖 30 年前只考虑关键字频率的统计排名,也不限制您使用它。默认情况下,Sphinx 还会分析关键字接近度,并将更接近的短语匹配排名更高,完美匹配排名靠前。此外,排名是灵活的:您可以从许多内置相关函数中进行选择,通过使用表达式调整它们的权重,或开发新的函数。
- 灵活的文本处理。Sphinx 索引功能包括对 SBCS 和 UTF-8 编码的全面支持(这意味着实际上支持世界上所有的语言);停用词删除和可选的命中位置删除(无中断索引);通过词形词典和词干分析器进行形态学和同义词处理;异常和混合字符;还有很多。
- 分布式搜索。搜索可以分布在多台机器上,从而实现横向扩展和 HA(高可用性)。
评论