我正在尝试为我的MySQL服务器使用Sphinx全文搜索功能。 我已经根据安装手册设置了本地Sphinx服务,并且能够进行文本搜索。
我可以连接到
mysql.exe --host=127.0.0.1 port=9306
端口9306
是 sphinx.conf 中配置的端口:
searchd {
...
listen = 9306:mysql41
...
}
并进行SphinxQL
次查询。我正在使用发行包附带的默认Sphinx示例数据库。
但是我想将Sphinx与我的MySQL服务器集成,这样连接到我的sql server的所有客户端都可以执行SphinxQL,我想用MySQL示例数据库sakila
来试用它答案 0 :(得分:12)
但是我想将Sphinx与我的MySQL服务器集成,这样连接到我的sql server的所有客户端都可以做SphinxQL
不能那样做。 Sphinx(当为sphinxQL启用时)只是为你提供一个服务器看起来就像一个mysql - 即它使用相同的通信协议 - 主要是因为它可以只重用mysql客户端库,而不是必须重新创建一个只为狮身人面像。
他们是不同的'服务器'。你连接到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,
不知道。可能是防火墙问题。