Mroongaブログ

2013-04-29

mroonga 3.03リリース

mroonga 3.03 をリリースしました!

インストール/アップグレード方法

それぞれの環境毎のインストール方法: インストール

以前のバージョンからアップグレードする場合には、アップグレード手順に注意が必要です。現在お使いのバージョンごとのアップグレード手順を参照してください。

1.20より前のバージョンからアップグレードする場合は 1.20リリース 2012/01/29 にある手順を使ってください。

1.20からアップグレードする場合は 2.00リリース 2012/02/29 にある手順を使ってください。

2.00か2.01からアップグレードする場合は、 2.02リリース 2012/04/29 にある手順でパッケージ署名用の新しい鍵をインポートしてください。

2.00以降でストレージモードにてマルチカラムインデックスを使っている場合は 2.02リリース 2012/04/29 にある手順でインデックスを作り直してください。

2.04以降でストレージモードにてSETカラムもしくは要素数が256より少ないENUMを使用している場合は、 2.05リリース 2012/07/29 にある手順でデータベースを再作成してください。

2.05以降でマルチカラムインデックスをVARCHARやCHAR型に対して使っている場合は、 2.08リリース 2012/10/29 にある手順でインデックスを再作成してください。

2.08以降でTIMESTAMP型のカラムを使っているテーブルがあれば、データベースを再作成してください。CHAR(N)を主キーとしているテーブルがあれば、インデックスを再作成してください。手順は 2.09リリース 2012/11/29 にあります。

今回のリリースの主なトピックは以下の通りです。

  • 公式URLの変更
  • Ubuntu 13.04 Raring Ringtailのサポート
  • コメントでノーマライザーの指定をサポート

公式URLの変更

これまで、mroongaの公式URLは mroonga.github.com だったのですが、mroonga.orgに変更しました。

これは、mroonga.github.comがmroonga.github.ioにリダイレクトされるようになったことがきっかけです。 外部要因で公式URLが変わってしまうのはあまり嬉しくないので、独自ドメインで提供するようにしました。

移行措置として従来通り mroonga.github.com にアクセスした場合でも、あるいは mroonga.github.io でアクセスしてもきちんと mroonga.org にリダイレクトされるようになっています。

Ubuntu 13.04 Raring Ringtailのサポート

今回のリリースでは 2013/04/25 にリリースされたばかりのUbuntu 13.04のサポートを追加しました。

インストール手順は ドキュメント を参照してください。

コメントでノーマライザーの指定をサポート

今回のリリースでは、FULLTEXT INDEXに対するノーマライザーの指定をサポートしました。

使うときは以下のようにします。

FULLTEXT INDEX (column) COMMENT 'normalizer "NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark"'

NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark というのはMySQL互換のノーマライザーを提供するgroonga-normalizer-mysqlに新たに追加したノーマライザーです。

これを使うと濁音、半濁音を区別することができるようになるので、照合順序として utf8_unicode_ci を使った場合に意図しない検索結果が含まれにくくなります。

具体的なサンプルで確認してみましょう。

CREATE TABLE test (
  id int(11) NOT NULL AUTO_INCREMENT,
  content varchar(255) NOT NULL COLLATE 'utf8_unicode_ci',
  content2 varchar(255) NOT NULL COLLATE 'utf8_unicode_ci',
  PRIMARY KEY (id),
  FULLTEXT INDEX (content),
  FULLTEXT INDEX (content2) COMMENT 'normalizer "NormalizerMySQLUnicodeCIExceptKanaCIKanaWithVoicedSoundMark"'
) ENGINE=mroonga DEFAULT CHARSET=utf8;

INSERT INTO test(content,content2) VALUES ('ブラック', 'ブラック');
INSERT INTO test(content,content2) VALUES ('ふらつく', 'ふらつく');

contentとcontent2にはいずれもFULLTEXT INDEXを適用しています。content2にはnormalizerを指定しているのが違っています。

では、「ブラック」と「ふらつく」をそれぞれ検索してみましょう。

SELECT * FROM test WHERE MATCH(content) AGAINST('ブラック' IN BOOLEAN MODE);
id  content content2
1   ブラック    ブラック
2   ふらつく    ふらつく
SELECT * FROM test WHERE MATCH(content) AGAINST('ふらつく' IN BOOLEAN MODE);
id  content content2
1   ブラック    ブラック
2   ふらつく    ふらつく

「ブラック」で検索しているのに「ふらつく」が含まれてしまっていますね。逆に「ふらつく」で検索しているのに「ブラック」が含まれてしまっていることがわかります。

では、normalizerを適用するとどうなるでしょうか。

SELECT * FROM test WHERE MATCH(content2) AGAINST('ブラック' IN BOOLEAN MODE);
id  content content2
1   ブラック    ブラック
SELECT * FROM test WHERE MATCH(content2) AGAINST('ふらつく' IN BOOLEAN MODE);
id  content content2
2   ふらつく    ふらつく

きちんと濁音も区別しているので「ブラック」と「ふらつく」が同一視されることはありません。このように意図しない結果を検索結果から除去できるようになりました。

さいごに

3.02からの詳細な変更点は 3.03リリース 2013/04/29 を確認してください。

それでは、mroongaでガンガン検索してください!