Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Sewellを使ってジゴクめいたRroongaクエリの可視性を上げる

前回の続きです。
sewellはジゴクめいたRroonga検索クエリを綺麗に処理してくれるgemです。

クエリの生成法

文字列から

Sewell.generate('foo AND bar -fizz', ['buzz']) 
#=> ( buzz@:foo ) + ( buzz@:bar)  - ( buzz@:fizz )

Sewell.generate('hoge' ['ramen', 'debu'])
 #=> ( ramen@hoge OR debu@hoge )
  • 第一引数にクエリ
  • 第二引数に検索対象にしたいカラム名を配列

で入れる。

ハッシュから

Sewell.generate({ramen: '二郎 OR 用心棒', gyowza: '佐藤伸一パリ'}, 'AND') 
#=> ( ramen@二郎 OR ramen@用心棒 ) + ( gyowza@佐藤伸一 gyowza@パリ )

Sewell.generate({ramen: '二郎 OR 用心棒', gyowza: '佐藤伸一 パリ'}, 'OR') 
#=> ( ramen@二郎 OR ramen@用心棒 ) OR ( gyowza@佐藤伸一 + gyowza@パリ )
  • 第一引数に key: 検索対象のカラム名 value: クエリ なハッシュ
  • 第二引数に複数のカラムを AND 条件で繋ぐか OR 条件で繋ぐかを入れる

複数のフォームから条件をとってきて検索するみたいな用途で使うことを想定しているそうです。

実際にRroongaと連携する

Regrepなどと同じく、オブジェクトとして格納されるので
それをrroongaに渡します。

require 'rroonga'
require 'sewell'

query = Sewell.generate( 'sena:airi OR mashiro AND nuko:buta',
      			 %w{sena uryu nuko} )
result = Groonga['SenaAiri'].select(query)

参考もと