在MySQL中运行多个查询(用于SphinxQL)

时间:2012-03-27 12:12:58

标签: mysql ruby sphinx

目前我们依靠Sphinx的PHP库来管理我们的分面搜索,这取决于使用Sphinx的多查询功能的能力。

最新的Sphinx搜索文档描述了如何通过MySQL在SphinxQL中执行相同的多查询过程。它给出了一个使用PHP的例子。

http://sphinxsearch.com/docs/manual-2.0.4.html#sphinxql-multi-queries

以这种方式支持多查询的ruby是否存在任何MySQL宝石?

我正在看mysql2 gem,这似乎是最新的东西,但似乎并不支持它。当我在ruby中进行Sphinx多查询时,我仍然感到茫然吗?

如果没有,我打算在接下来的几天内写一个支持他们的客户端,但显然SphinxQL会让这个更多更容易。我也不必让我的gem连接到两个不同的RT索引协议(只能通过SphinxQL写入)。似乎SphinxQL基本上就是它所处的位置。

2 个答案:

答案 0 :(得分:0)

看来ruby-mysql gem支持这个:https://github.com/tmtm/ruby-mysql/blob/master/lib/mysql.rb#L406-419

我认为它正在正确处理。它表示“执行”,但实际上它似乎只是从已经执行的查询中获取下一组结果。

  # execute next query if multiple queries are specified.
  # === Return
  # true if next query exists.
  def next_result
    return false unless more_results
    check_connection
    @fields = nil
    nfields = @protocol.get_result
    if nfields
      @fields = @protocol.retr_fields nfields
      @result_exist = true
    end
    return true
  end

此处也有提及:http://zetcode.com/db/mysqlrubytutorial/(在“多重声明”下)

答案 1 :(得分:0)

我最终编写了自己的gem,其中包括一个围绕MySQL的小包装器。不是一个完全成熟的mysql客户端,而是一个支持SphinxQL的最小桥梁。

你可以在这里看到宝石:https://github.com/d11wtq/oedipus

此处的C扩展名为:https://github.com/d11wtq/oedipus/blob/master/ext/oedipus/oedipus.c