Senna on Ruby

若しくは、Ruby on Senna

Sennaにて、まずはMySQLにおけるinstallをする。

% sudo apt-get install ruby1.8-dev
% cd ~/work/senna/bindings/ruby
% ruby extconf.rb
% make
% sudo make install

として、install完了。 そんじゃ、実際に使ってみるぞと…。

Senna API on Ruby

RubyでのAPIは、すごくおおまかに言うとこんな感じ。

module Senna
  class Index
    def initialize(path, flags=0)
      # 引数: path, index fileのbasenameを指定する。flags, 未使用。
      # 実行: sen_index_open(path), sen_index_create が呼ばれる。
    end

    def upd(key, oldvalue, newvalue)
      # index内のkeyに対応するレコードの値をoldvalueからnewvalueに更新します。
      # 引数: 現時点ではoldvalueであるkeyに対して、newvalueをいれる。
      # 新規レコードである場合はoldvalueにnilを指定します。
      # レコードを削除する場合はnewvalueにnilを指定します。
      # oldvalueには前回indexに登録した時の値を正しく指定する必要があります。
      # 実行: sen_index_upd(key, ov, nv) が呼ばれる。
      # 返値: 成功したかどうかが、true, falseで返る?
    end

    def sel(string)
      # indexから値にstringを含むレコードを取り出し、Recordsインスタンスとし
      # て返します。
      # 引数: keyに対するrecordsを取得する。
      # 実行: sen_index_sel(string) が呼ばれる。
      # 返値: Recordsが返る
    end

    def select(key)
      # 引数: keyに対するrecordsを取得する。
      # 実行: sen_records_open, sen_index_select が呼ばれる。
      # 返値: Recordsが返る
    end

    def check
      # 実行: sen_index_check が呼ばれる。
    end
  end

  class Records
    def curr_score
      # カレントレコードのスコア(検索クエリーに対する適合度)を返します。
      # 実行: sen_records_curr_score が呼ばれる。
      # 返値: 結果が数値で返る。
    end

    def next
      # カレントレコードを一つ進めます。
      # 実行: sen_records_next が呼ばれる。
      # 返値: 文字列が返る。無ければnilが返る。
    end

    def rewind
      # カレントレコードを最初のレコードに戻します。
      # 実行: sen_records_rewind が呼ばれる。
      # 返値: 結果がtrue, falseで返る。
    end

    def nhits
      # recordsに含まれるレコードの数を返します。
      # 実行: sen_records_nhits が呼ばれる。
      # 返値: その値が返る。
    end

    def find(key)
      # recordsにkeyに対応するレコードが含まれているかどうかを調べます。
      # 引数: recordsからkeyをさがす。
      # 実行: sen_records_find(key) が呼ばれる。
      # 返値: 値が返る。
    end
  end
end

現時点では、元々のAPIを理解することが必須。 現在、Rubyからは簡易APIだけが見えているので、そこだけ見ればよい。

test case

test caseをかいてみた。→→→→

Last modified: 2006-09-05