⚠️ 此页面为自动翻译,翻译可能不完美。

Can Manticore work without MySQL?

author image
View as markdown

这是一个常见问题和误解,即Sphinx和Manticore都需要MySQL数据库作为前提条件。实际上并非如此,本文将探讨搜索引擎如何独立于MySQL使用。

虽然大多数用户使用的是 MySQL 数据库(或其变体,如 MariaDB/Percona Server),而 Sphinx 也面向 MySQL 用户:它实现了一个数据库插件(SphinxSE ),并且其中一种查询协议基于 mysql,但该软件并不是 MySQL 的专用解决方案,而是一个通用搜索工具。

编译 Sphinx 和 Manticore 不需要(过去也从不需要)任何 MySQL 库。mysql lib client 只用于 indexer 的 mysql 驱动。不过即使没有它,你仍然可以通过 ODBC 驱动从 MySQL 数据库索引数据。SphinxQL 的 MySQL 协议是原生实现的,不需要 MySQL 头文件或库。

索引

Manticore实现了多种可以从数据库获取数据的驱动程序。针对MySQL、MSSQL和PostgreSQL有特定的数据库驱动程序,同时还有ODBC的支持。MySQL和PostgreSQL驱动程序需要各自的客户端库。MSSQL驱动程序需要ODBC客户端库。然而,Manticore可以被构建为不支持这些驱动程序中的某些,甚至完全不支持任何驱动程序。

除了数据库驱动程序,还有更通用的数据源驱动程序,例如XML管道和CSV/TSV驱动程序。通过这些驱动程序,可以从非关系型仓库(如NoSQL)或简单的文件存储中获取数据。XML驱动程序需要特定格式的XML文件。在CSV/TSV的情况下,唯一的要求是第一列是文档ID。对于这些驱动程序,Manticore不需要文件的完整路径,而是执行文件并期望响应为XML/CSV/TSV文件。这可以用于处理多个文件或包含文件的整个文件夹。

搜索

第一个实现的API是SphinxAPI,这是一个自定义的二进制协议,官方为多种编程语言开发了客户端库,第三方也将其移植到其他语言中。虽然它不包含所有功能,但SphinxAPI协议确实提供了完整的搜索实现。SphinxAPI协议的问题(同样也用于分布式索引内部)是保持客户端库的更新。随着大多数用户更倾向于使用MySQL客户端/连接器且不需要在守护进程升级之间进行任何维护,SphinxQL协议变得更为流行——与之相比,SphinxAPI需要特别保持更新,尤其是为了访问新实现的功能。SphinxAPI客户端官方在PHP、Python、Java和Ruby等几种流行语言中实现,但第三方移植版本也存在于其他语言中。

从 Sphinx 2.3 开始加入了 HTTP 协议,但它只作为代理,用于 sql 或 SphinxAPI 格式的搜索。Manticore 对此进行了改进,新增了一些端点,在请求和响应的载荷中都使用 JSON。由于它的工作方式类似普通 Web 服务,响应可以通过反向代理服务器(例如 nginx)进行代理或缓存。目前,JSON API 提供用于搜索、数据操作和 percolation 的路径,未来还会实现更多命令。

安装Manticore Search

在 Linux 或 macOS 上用一条命令安装 Manticore Search:

curl https://manticoresearch.com | sh

有关高级安装选项,请参阅完整安装指南 和手册 。

安装Manticore Search