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

Bye Bye Moore

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

rroongaの全文検索条件記述方法

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というものがあります。
これについては次回紹介する予定です。