Bye Bye Moore

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

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