将Sphinx集成到MySQL

时间:2012-07-28 04:16:57

标签: mysql sphinx

我正在尝试为我的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

来试用它
  • 实现这一目标的步骤是什么?
  • 我是否需要将数据库引擎从InnoDB转换为Sphinx?
  • 此外,从看来,Sphinx只能索引一(1)个数据库 每个配置表,我怎样才能确保所有表中的 MySQL数据库被索引了吗?

1 个答案:

答案 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,

不知道。可能是防火墙问题。