这是一个常见问题和误解,即Sphinx和Manticore都需要MySQL数据库作为前提条件。实际上并非如此,本文将探讨搜索引擎如何独立于MySQL使用。
虽然大多数用户使用MySQL数据库(或其变种如MariaDB/Percona Server),并且Sphinx最初是面向MySQL用户的——作为数据库插件(SphinxSE)被实现,且其中一个查询协议是基于MySQL的,但该软件并非专为MySQL设计,而是一个通用的搜索工具。
在编译Sphinx和Manticore时,并不需要(也从未需要过)任何MySQL库。仅当使用索引器的MySQL驱动时,才需要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提供了搜索、数据操作和渗透的路径,未来将实现更多命令。