Bye Bye Moore

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

groonga

mroongaで妙なエラーを吐いた場合、migrateファイルを警戒する

とあるシステムで数年前にmroongaで実装した部分を再度実行しようとしたところ、エラーを吐いてmigrateすらできなくなりました。 実際のところ とあるモデル(Hoges)の検索画面でエラーを吐きました。 == UseMroongaInEntriesTable: migrating ==============…

mroongaで論理積・論理和の検索条件を扱う(Boolean mode編)

mroongaで論理積・論理和の検索条件を扱う - Bye Bye Mooreではmroonga_commandを使う方法を採用しました。 今回はMySQLの全文検索方式に倣ってBoolean modeによる論理積を実装してみます。当該modelの末尾あたりに scope :search_with, ->(name) { where(%Q…

mroongaで前方検索と後方検索

5/20追記:mroonga_command以外のバージョンも作りました mroongaで論理積・論理和の検索条件を扱う(Boolean mode編) - Bye Bye Moore 前回に引き続きmroongaの検索条件について。 前方一致(??) 本来なら、その言葉から始まる言葉に一致するのですが... …

mroongaで論理積・論理和の検索条件を扱う(mroonga_command編)

mroongaで論理を扱う場合、mroonga_commandでラッピングしてしまうのが手っ取りバ早そうです。 ...もっとスマートな方法をご存知の方はお気軽にトマホークを御投擲下さい(震え声 AND(論理積)検索 両方一致のAND検索 mysql> select mroonga_command("select …

ActiveRecordのmigration時にSQLのエンジンを選択する

たとえば、検索エンジンにmroongaを追加したい場合は 既存のdb/migrationの当該ファイルにoptions: "ENGINE = mroonga"を追加します class CreateProfessors < ActiveRecord::Migration def change create_table :professors ,options: "ENGINE = mroonga" d…

「Can't initialize function 'mroonga_command'」と出たらエンジンがちゃんとmroongaになっていない

二日連続でgroongaの失敗記事です( mysql> select mroonga_command("tokenize TokenMecab 'alpha'"); とやって ERROR1123(HY000) failed to open database: syscall error Can't initialize function 'mroonga_command' 等々が出たら、エンジンを正常にmroo…

「[tokenize] unknown tokenizer: <TokenMecab>」と出たら素直にgroongaのビルドからやり直しませう

groonga導入済の環境で、mroongaをmecab付きで導入しようとしたところ、ダメっぽい感じでした。 $ groonga > register normalizers/mysql [[-3,1399468383.43181,0.00655889511108398,"cannot find plugin file: </usr/local/Cellar/groonga/4.0.1/lib/groonga/plugins/normalizers/mysql.so>",[["grn_plugin_register","plugin.c",507]]…

既存のrailsプロジェクトにgroongaを追加する

既存のrailsプロジェクトにgroongaを追加する方法です。 今回はprofessorsというモデルのnameカラムに対して全文検索をかけるシステムを想定しています。 gem 'rroonga' と追記し $ bundle installして導入します。 コンパイルが入るので若干時間が掛かりま…

MroongaがあればMySQLでもGroongaを使える

Groonga自体もSqliteよろしく気軽に扱えるDBです。 ただ、既に動いてるシステムだとか本気で巨大なデータを扱う時にはやっぱり単体では厳しい局面もあります。 そこで登場するのがMroonga! なんとMySQL...そして今をトキメクMariaDBまで扱える拡張です。 コ…

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

前回の続きです。 sewellはジゴクめいたRroonga検索クエリを綺麗に処理してくれるgemです。 クエリの生成法 文字列から Sewell.generate('foo AND bar -fizz', ['buzz']) #=> ( buzz@:foo ) + ( buzz@:bar) - ( buzz@:fizz ) Sewell.generate('hoge' ['ramen…

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

rroongaの全文検索条件を記述する方法は大きく分けて二種類あります。まずは、Ruby式にblockとregrepの活用。 これは前回の記事で扱いました。 Groonga['bookmarks'].select{|x| x.word =~ "buta"} 他のものは、クエリ形式があります。 引数として渡すので、…