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

Bye Bye Moore

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

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"} 他のものは、クエリ形式があります。 引数として渡すので、…