読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

ruby groonga

前回の続きです。
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)

参考もと