但是我想将 Sphinx 与我的 MySQL 服务器集成,这样所有连接到我的 sql 服务器的客户端都可以执行 SphinxQL
不能那样做。Sphinx(当为 sphinxQL 启用时)只是为您提供了一个看起来像 mysql 的服务器 - 即它使用相同的通信协议 - 主要是为了可以重用 mysql 客户端库,而不必为 sphinx 创建一个新的。
它们是不同的“服务器”。您连接到 mysql 服务器以运行 mysql 命令;您连接到 sphinx 服务器以运行 sphinxQL 命令。
应用程序必须分别连接到每个“服务器”。想象一下 sphinx 有点像 postgres,你显然没有连接到 mysql 并期望能够运行 postgresql。
但是有 SphinxSE - 这是一个假的 mysql 存储引擎。您将其安装到 mysql 中,然后您可以使用此引擎创建表。然后你对这个表运行 mysql 查询,引擎盖下是一个正在运行的 sphinx-server。所以对 mysql 来说,它看起来像是一个包含数据的表,这是最有用的,因为可以将这个搜索表与原始数据表“连接”,以在一个 mysql 查询中获取结果和原始数据。
然后应用程序不必连接到 sphinx 本身。SphinxSE 为您完成。
http://sphinxsearch.com/docs/current.html#sphinxse
我需要将数据库引擎从 InnoDB 转换为 Sphinx 吗?
不,您可以使用您喜欢的任何引擎将原始数据保留在原处。Sphinx 只提供一个“索引”——它不存储原始数据*。它本身不是数据库,只是通过高度优化的索引提供快速查询。
基本上,您向 sphinx 询问与某个查询匹配的文档的唯一 ID。然后使用这些 id 来查找数据。SphinxAPI、sphinxSE 和 sphinxQL 只是执行此操作的三种不同机制。
此外,从表面上看,Sphinx 只能为每个配置索引一 (1) 个数据库表,
不可以。一个 sphinx 实例可以托管许多索引。一个索引可以有很多来源。所以只能为每个表创建一个索引。或者如果您主要想一起搜索它们,可以只创建一个合并索引。
-- ** 编辑以回复评论中的问题:**
当你这么说时,sphinx 可以承载许多索引,它是仅依赖于 sphinx.conf 配置文件吗?
您可能会为每个表定义一个 sphinx 索引。因此,每个表都需要一个源/索引对。(除非你想在一个索引中索引所有表,这也是可能的。
它无法读取表本身,并创建配置文件,您必须单独定义每个索引。
当你说“给你一个看起来像 mysql 的服务器”时,你的意思是像一个代理,
不,不是代理。
我的 MySQL 客户端在哪里可以连接到这个 Sphinx 端口并且客户端会认为它是 MySQL 服务器?
基本上是的。客户端将像连接到 mysql-server 一样连接到它。
如果是这样,那么我可以在同一连接上执行 MySQL SQL 查询和 SphinxQL 吗?
不,不可能。连接到 mysql-server,运行 mysql 查询。连接到 searchd 以运行 sphinxQL 查询。
两个连接,每个服务器一个。
为什么我的 MySQL Workbench 无法连接到端口 9306,
不知道。可能是防火墙问题。