mroonga - MySQLで高速に全文検索するためのオープンソースのストレージエンジン

お知らせ

5.04リリース - 2015/06/29

改良

  • [rpm][mysql56-community-mroonga][percona-server-56-mroonga] インストール時にmysqldが動いていない場合は起動するようにしました。(これは5.03-2で入った変更です) [GitHub#58] [GMOメディア株式会社さんがパッチ提供]

  • [mariadb10.1] APIの変更に追従しました。

  • [mariadb] DDL内でカスタムパラメーターをサポートしました。この機能はMariaDBでのみ使うことができます。

    • FULLTEXT IDNEXTOKENIZER パラメーターをサポート:

      CREATE TABLE diaries (
        id int PRIMARY KEY AUTO_INCREMENT,
        body text,
        FULLTEXT INDEX body_index (body) TOKENIZER='TokenBigramSplitSymbolAlphaDigit'
      ) ENGINE = Mroonga COMMENT = 'engine "InnoDB"' DEFAULT CHARSET = utf8;
      
    • FULLTEXT IDNEX と通常の INDEXNORMALIZER パラメーターをサポート:

      CREATE TABLE memos (
        id INT NOT NULL PRIMARY KEY,
        content TEXT NOT NULL,
        FULLTEXT INDEX (content) NORMALIZER='NormalizerAuto'
      ) ENGINE = Mroonga COMMENT = 'engine "InnoDB"' DEFAULT CHARSET = utf8;
      
    • FULLTEXT IDNEXTOKEN_FILTERS パラメーターをサポート:

      CREATE TABLE memos (
        content VARCHAR(64) NOT NULL,
        FULLTEXT INDEX (content) TOKEN_FILTERS='TokenFilterStopWord,TokenFilterStopWord'
      ) ENGINE = Mroonga COMMENT = 'engine "InnoDB"' DEFAULT CHARSET = utf8;
      
    • FULLTEXT IDNEX と通常の INDEXFLAGS パラメーターをサポート:

      CREATE TABLE memos (
        content VARCHAR(64) NOT NULL,
        FULLTEXT INDEX (content) FLAGS='WITH_POSITION|WITH_WEIGHT'
      ) ENGINE = Mroonga COMMENT = 'engine "InnoDB"' DEFAULT CHARSET = utf8;
      
    • フィールドで GROONGA_TYPE パラメーターをサポート:

      CREATE TABLE tags (
        name VARCHAR(64) PRIMARY KEY
      ) ENGINE = Mroonga COMMENT = 'engine "InnoDB"' DEFAULT CHARSET = utf8 COLLATE = utf8_bin;
      
      CREATE TABLE bugs (
        id INT UNSIGNED PRIMARY KEY,
        tag VARCHAR(64) GROONGA_TYPE='tags'
      ) ENGINE = Mroonga COMMENT = 'engine "InnoDB"' DEFAULT CHARSET = utf8;
      
  • [ストレージモード] STRICT_TRANS_TABLES のときに、不正な日付をエラーにするようにしました。 [groonga-dev,03299] [GMOメディア株式会社さんが提案]

    • これは後方互換性のない変更です。例:

      • 準備(共通):

        mysql> CREATE TABLE timestamps (
            ->   id INT PRIMARY KEY AUTO_INCREMENT,
            ->   create_dt DATETIME
            -> ) ENGINE = Mroonga DEFAULT CHARSET = utf8;
        Query OK, 0 rows affected (0.09 sec)
        
        mysql> SET sql_mode='';
        Query OK, 0 rows affected (0.01 sec)
        
        mysql> INSERT INTO timestamps (create_dt) VALUES ("2001-00-00 00:00:00");
        Query OK, 1 row affected, 1 warning (0.00 sec)
        
        mysql> SHOW WARNINGS;
        +---------+------+------------------------------------------------+
        | Level   | Code | Message                                        |
        +---------+------+------------------------------------------------+
        | Warning | 1265 | Data truncated for column 'create_dt' at row 1 |
        +---------+------+------------------------------------------------+
        1 row in set (0.00 sec)
        
        mysql> SELECT * FROM timestamps;
        +----+---------------------+
        | id | create_dt           |
        +----+---------------------+
        |  1 | 2001-01-01 00:00:00 |
        +----+---------------------+
        1 row in set (0.00 sec)
        
        mysql> SET sql_mode='STRICT_TRANS_TABLES';
        Query OK, 0 rows affected (0.01 sec)
        
      • 変更前(5.03以前):

        mysql> INSERT INTO timestamps (create_dt) VALUES ("2002-00-00 00:00:00");
        ERROR 1265 (01000): Data truncated for column 'create_dt' at row 1
        
        mysql> SELECT * FROM timestamps;
        +----+---------------------+
        | id | create_dt           |
        +----+---------------------+
        |  1 | 2001-01-01 00:00:00 |
        |  2 | 2002-01-01 00:00:00 |
        +----+---------------------+
        2 rows in set (0.00 sec)
        
      • 変更後(5.04以降):

        mysql> INSERT INTO timestamps (create_dt) VALUES ("2002-00-00 00:00:00");
        ERROR 22003: Out of range value for column 'create_dt' at row 1
        
        mysql> SELECT * FROM timestamps;
        +----+---------------------+
        | id | create_dt           |
        +----+---------------------+
        |  1 | 2001-01-01 00:00:00 |
        +----+---------------------+
        1 row in set (0.00 sec)
        
  • カスタムトークナイザー使用時のキーワードを parser から tokenizer へ変更しました。

    • インデックスコメント: parser -> tokenizer

    • サーバー変数: mroonga_default_parser -> mroonga_default_tokenizer

    • parsermroonga_default_parser は非推奨ですが、Mroonga 6.XXまでは使うことができます。

  • インデックスカラムのflagsのパラメーター名を変更しました。

    • index_flags -> flags

    • index_flags は非推奨ですが、Mroonga 6.XXまでは使うことができます。Mroonga 7.00で削除される予定です。

  • [ストレージモード] カラムに対してGroongaに存在しない型を指定した場合にエラーメッセージを表示するようにしました。

  • Groongaのカラムの型のパラメーター名を変更しました。

    • type -> groonga_type

    • type は非推奨ですが、Mroonga 6.XXまでは使うことができます。Mroonga 7.00で削除される予定です。

感謝

  • GMOメディア株式会社さん

5.03リリース - 2015/05/29

改良

  • mariadb10.1: APIの変更に追従しました。

  • MySQLの内部で使われている FT_SORTED フラグに対応しました。これにより、全文検索時のMySQLとの互換性が向上し、MySQLで行っていた冗長なソート処理を減らせる可能性があります。

  • mysql57: APIの変更に追従しました。

修正

  • [ストレージモード] 不正なdatetimeに対してユニークインデックスが正しく機能しない不具合を修正しました。この不具合は不正なdatetimeを挿入したときに発生します。ユニークインデックスが実際に挿入される値ではなく、補正前の不正な値で作成されてしまうためです。 [groonga-dev,03219] [各務さんが報告]

  • [マルチカラムキー] デコードした値が壊れるかもしれない潜在的な不具合を修正しました。この不具合はバイトオーダーの変換をデコードのときにしていないことが起因で発生する可能性があります。

  • [windows] Mroongaに groonga-normalizer-mysql が組込まれていると、不必要な groonga-normalizer-mysql プラグインの検索が実行される不具合を修正しました。 [GitHub#53] [torinkyさんが報告]

  • クエリに Pragma が含まれているときに、キーワードの長さを間違えてしまい、正しく検索できない不具合を修正しました。 [GitHub#54] [村上さんがパッチ提供]

  • [ストレージモード] 複数接続時にユニーク制約が無視されてしまう不具合を修正しました。 [groonga-dev,03243] [各務さんが報告]

感謝

  • 各務さん

  • torinkyさん

  • 村上さん

5.02リリース - 2015/04/29

改良

  • [doc] リリース手順 を更新しました。

  • [ストレージ] 範囲指定のレコード数を見積もる際のパフォーマンスを改善しました。以前のバージョンでは、Mroongaは実際のレコード数をカウントします。そのため、レコード数が増えるとパフォーマンスに影響していました。この恩恵を受けるにはGroonga 5.0.2以降が必要です。 [groonga-dev,03150] [嶋田さんが報告]

  • [実験的] mroonga_max_n_records_for_estimate サーバー変数を追加しました。この変数はレコード数を見積る際の最大レコード数を制限するのに使います。対象となるレコードが多いときでも、見積もる際のコストを抑えることができます。

  • [rpm][centos] 最新のMySQL 5.6でビルドするようにしました。

  • [ラッパーモード] Mroongaの ORDER BY LIMIT 最適化で主キーのソートに対応しました。 [Tsugunori Nashiroさんが報告]

  • Debian 8.0 (Jessie)に対応しました。

  • Ubuntu 15.04 Vivid Vervetに対応しました。

修正

  • [doc] Windows版パッケージへのリンクが古いのを修正しました。 [METAL_GEAR_mkIIさんが報告]

  • [ストレージモード][mysql56] ORDER BY のカラム指定が重複しているときにクラッシュする問題を修正しました。 ORDER BY LIMIT の最適化を適用するケースでSQLの ORDER BY カラム指定が重複しているときに発生します。この問題はMySQL 5.5には影響しません。 [GitHub#50] [GMOメディア株式会社さんが報告]

感謝

  • 嶋田さん

  • Tsugunori Nashiroさん

  • METAL_GEAR_mkIIさん

  • GMOメディア株式会社さん

5.01リリース - 2015/03/29

改良

  • [ストレージモード] PARTITION BY RANGE をサポートしました。この機能は MariaDB 10.xではサポートしていません。これはMariaDB 10.xが.parファイルを削除する仕様に由来する制限です。

  • [mysql56] PRIMARY KEY に対してコピーせずに ALTER TABLE できなくしました。この変更はGroongaの制限によるものです。Groongaではテーブルのキーの変更をサポートしていません。 [加藤さんが報告]

  • Visual Studio 2010 と Visual Studio 2012 のサポートをやめました。Visual Studio 2013 以降をMroongaのビルドに使ってください。 [GitHub#45]

  • [windows] Visual Studio 2015でビルドできるようにしました。

  • プライマリーキーに PRIMARY KEY (...) USING HASH を指定しているときに、そのテーブルのコメントにオプションを指定できるようにしました。[GitHub#46] [村上さんがパッチ提供]

  • インデックスカラムのフラグをインデックスのコメントに指定できるようにしました。 NONEWITH_POSITIONWITH_SECTIONWITH_WEIGHT がインデックスカラムのフラグとして使えます。[GitHub#47] [村上さんがパッチ提供]

  • MySQL 5.7でビルドできるようになりました。

  • [rpm][centos] CentOS 6とCentOS 7でPercona Server 5.6.xをサポートしました。[吉野さんがCentOS 6でテスト]

  • utf8_unicode_520_ciutf8mb4_unicode_520_ci をサポートしました。これらの照合順序をサポートするために、Mroongaは groonga-normalizer-mysql 1.0.9 以降を必要とするようになりました。

修正

  • スコアを浮動小数点で保持するように変更しました。この変更は非互換な変更で、GroongaのDB APIがGroonga 5.0.1で変更されたことに伴います。スコアの値がこれまでと違ってしまうことがあるかも知れません。

  • ALTER TABLE で複数のカラムインデックスを作成するのに失敗したときのエラーチェックがなかったので追加しました。

  • [mariadb] SET variableしたときにクラッシュする不具合を修正しました。この不具合はMariaDBのバージョンに依存します。 (<= 5.5.41 と <= 10.0.16)

  • [rpm][centos] CentOS 7でパッケージのリリースバージョンを修正しました。[GitHub#44] [CharAzさんが報告]

  • [mariadb55] インストール、アンインストールしてから再度インストールしようとすると失敗するのを修正しました。

感謝

  • 加藤さん

  • 村上さん

  • 吉野さん

  • CharAzさん

5.00リリース - 2015/02/09

  • 5.00になりました!

改良

  • [appveyor] WindowsでのCIを AppVeyor で行うようになりました。Windowsでビルドに失敗したのがすぐにわかるようになりました。groonga-mysql-commit@lists.sourceforge.jpを購読するとビルドの状態を知ることができます。

  • [rpm][centos] CentOS 7でMySQL 5.6.23向けにビルドするようにしました。[groonga-dev,03083] [青地さんが報告]

修正

  • [cmake] ビッグエンディアンのサポートを明示的に無効にしました。

感謝

  • 青地さん

過去のリリース