Manticore 可以在没有 MySQL 的情况下工作吗?

这是一个常见的问题,也是一个误解,认为 Sphinx 和 Manticore 都需要 MySQL 数据库。事实并非如此,在本文中,我们将讨论搜索引擎如何独立于 MySQL 使用。

虽然大多数用户都在使用 MySQL 数据库(或它的变种,如 MariaDB/Percona Server),而 Sphinx 的目标用户是 MySQL 用户——作为一个数据库插件(SphinxSE)被实现,并且查询协议之一是基于 mysql 的,但该软件并不是专门针对 MySQL 的解决方案,而是一个通用的搜索工具。

编译 Sphinx 和 Manticore 并不需要(也从未需要)任何 MySQL 库。mysql lib 客户端仅在索引器的 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 协议(在分布式索引中也使用)的问题是保持客户端库的更新。SphinxQL 协议变得更为流行,因为大多数用户使用 mysql 客户端/连接器没有问题,并且在守护进程升级之间不需要任何维护——与此相比,SphinxAPI 需要保持更新,尤其是访问新实现的功能。SphinxAPI 客户端在 PHP、Python、Java 和 Ruby 等几种流行语言中官方实现,但其他语言也存在第三方移植版本。

从 Sphinx 2.3 开始添加了 HTTP 协议,但它仅作为 sql 或 SphinxAPI 格式搜索的代理。这在 Manticore 中得到了改进,通过新的端点使用 JSON 作为请求和响应的有效载荷。由于它的工作方式类似于常规的网络服务,因此响应可以通过反向代理服务器(例如 nginx)进行代理或缓存。目前,JSON API 提供用于搜索、数据操作和穿透的路径,未来将实现更多命令。

安装Manticore Search

安装Manticore Search