# Can Manticore work without MySQL?

这是一个常见问题和误解，即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提供了搜索、数据操作和渗透的路径，未来将实现更多命令。
