rroongaの全文検索条件を記述する方法は大きく分けて二種類あります。
まずは、Ruby式にblockとregrepの活用。
これは前回の記事で扱いました。
Groonga['bookmarks'].select{|x| x.word =~ "buta"}
他のものは、クエリ形式があります。
引数として渡すので、間違って"{}"で閉じないようにして下さい。
Groonga['bookmarks'].select('word:@buta')
この奇妙な構文の意味は
"groonga" #=>カラムの値が "groonga" のレコードにマッチ "name:daijiro" #=>カラムが属しているテーブルの "name" カラムの値が "daijiro" のレコードにマッチ "description:@groonga" #=>カラムが属しているテーブルの "description" カラムが "groonga" を含んでいるレコードにマッチ
となっています。
カラム形式の複合条件
さて...この程度ならカワイイものですが...
入り組んだ条件の場合、以下のような感じになります。
Groonga['bookmarks'].select( ( sena:@airi ) OR ( sena:@mashiro OR uryu:@mashiro OR nuko:@mashiro ) + ( nuko:@buta ) )
...軽く死ねますね。
これを解決するgemとしては、sewellというものがあります。
これについては次回紹介する予定です。