Bye Bye Moore

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

「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'

等々が出たら、エンジンを正常にmroongaに変更できていない可能性が高いです。*1

mysql> show table status;

を叩いてみて、当該テーブル(今回はprofessors)のEngineを見てみます。

| Name              | Engine  | Version | Row_format | Rows | ...
...
| professors        | InnoDB |      10 | Dynamic    |  254 | ...
...

となっていれば、mroonga対応になっていません。

mysql> alter table professors engine = mroonga;

でエンジンを変更します。

| Name              | Engine  | Version | Row_format | Rows | ...
...
| professors        | mroonga |      10 | Dynamic    |  254 | ...
...

この状態で先ほどのコマンドを叩くと...

mysql> select mroonga_command("tokenize TokenMecab 'alpha'");
+------------------------------------------------+
| mroonga_command("tokenize TokenMecab 'alpha'") |
+------------------------------------------------+
| [{"value":"alpha","position":0}]               |
+------------------------------------------------+
1 row in set (0.01 sec)

肝心の検索の方も

mysql> select name from professors where match(name) against('+田中');
+--------------------+
| name               |
+--------------------+
| 田中 太郎           |
| 田中 正造           |
+--------------------+
2 rows in set (0.01 sec)

と、ちゃんと対応するようになりました。

*1:本当は実ログを見せたかったのですが突発の再起動案件で吹っ飛びました