Выполнение нескольких запросов в MySQL (для SphinxQL) - PullRequest
0 голосов
/ 27 марта 2012

В настоящее время мы полагаемся на PHP-библиотеку Sphinx для управления нашим многогранным поиском, который зависит от возможности использовать функцию множественных запросов Sphinx.

Последняя поисковая документация Sphinx описывает, как выполнить ту же процедуру с несколькими запросами в SphinxQL через MySQL. Приводится пример использования PHP.

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

Существуют ли какие-либо гемы MySQL для ruby, которые поддерживают множественные запросы таким образом?

Я смотрю на самоцвет mysql2, который кажется самым последним, но, похоже, не поддерживает его. Я все еще в растерянности, когда дело доходит до нескольких запросов Sphinx в ruby?

Я собираюсь написать клиента, который будет поддерживать их в ближайшие несколько дней на работе, если нет, но, очевидно, SphinxQL сделает это намного проще. Я также предпочел бы не подключать мой gem к двум различным протоколам для индексов RT (которые могут быть записаны только через SphinxQL). Похоже, что SphinxQL в основном там, где он находится.

Ответы [ 2 ]

0 голосов
/ 05 мая 2012

В итоге я написал свой собственный гем, который включает в себя небольшую оболочку вокруг MySQL. Не полноценный клиент mysql, а минимальный мост для поддержки SphinxQL.

Камень можно увидеть здесь: https://github.com/d11wtq/oedipus

И расширение C здесь: https://github.com/d11wtq/oedipus/blob/master/ext/oedipus/oedipus.c

0 голосов
/ 27 марта 2012

Похоже, что гем ruby-mysql поддерживает это: 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/ (в разделе «Несколько заявлений»)

...