Mroongaブログ

2021-11-29

Mroonga 11.10リリース!

Mroonga 11.10 をリリースしました!

変更点

今回の変更点は以下の通りです。

改良

  • AlmaLinux AlmaLinux 8 をサポートしました。

    • AlmaLinux MySQL 8.0.27をサポートしました。

      • MySQL 8.0 のパッケージには以下の制限があります。

    • AlmaLinux Percona Server 8.0.26をサポートしました。

    • AlmaLinux MariaDB 10.3.32、10.4.22、10.5.13、10.6.5をサポートしました。

  • CentOS MariaDB 10.2.41、10.3.32、10.4.22、10.5.13、10.6.5をサポートしました。

  • Ubuntu Ubuntu 21.04 (Hirsute Hippo) と 21.10 (Impish Indri) の MySQL 8.0 をサポートしました。

    • MySQL 8.0 のパッケージには以下の制限があります。

修正

  • CentOS MariaDB 10.6向けMroongaを提供していなかった問題を修正しました。

  • 最適化 Mroongaが行カウントの最適化を誤って適用する問題を修正しました。

    通常、Mroongaは、 SELECTCOUNT(*) だけを取得し、 WHERE の条件がインデックスだけで処理できる時に、 行カウントの最適化を適用します。

    しかし、以下のケースのように WHERE の条件がインデックスだけで処理できない場合でも、Mroongaは、行カウントの最適化を適用していました。 結果として、 SELECT COUNT(*) WHERE ... の結果が間違っていました。

      CREATE TABLE roles (
        id INT
      );
    
      INSERT INTO roles VALUES (1), (2), (3), (4), (5);
    
      CREATE TABLE users (
        id INT,
        role_id INT,
        INDEX (role_id)
      );
    
      INSERT INTO users VALUES (10, 1);
      INSERT INTO users VALUES (11, 2);
      INSERT INTO users VALUES (13, 3);
      INSERT INTO users VALUES (14, 4);
      INSERT INTO users VALUES (15, 5);
      INSERT INTO users VALUES (20, 1);
      INSERT INTO users VALUES (21, 2);
      INSERT INTO users VALUES (23, 3);
      INSERT INTO users VALUES (24, 4);
      INSERT INTO users VALUES (25, 5);
    
      SELECT COUNT(*)
        FROM (
          SELECT roles.id
            FROM roles
                 LEFT JOIN users ON users.id <= 100 AND
                                    users.role_id = roles.id
        ) roles_users;
    
  • Mroongaが 'STRING_FIELD =' のコンディションプッシュダウンで適切なエンコーディングを設定しない問題を修正しました。

    以下ケースでは、 Mroongaが 'STRING_FIELD =' の条件をコンディションプッシュダウンしますが、 この時、Mroongaは適切なエンコーディングを検索キーワードに設定しません。 結果として、Mroongaは検索キーワードのノーマライズに失敗します。

      CREATE TABLE memos (
        id INT PRIMARY KEY,
        title TEXT,
        INDEX (title)
      ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4;
    
      INSERT INTO memos VALUES (1, 'Groonga');
      INSERT INTO memos VALUES (2, 'Mroonga');
    
      SELECT *
        FROM memos
        WHERE title = 'mroonga'
        ORDER BY id;
    

おわりに

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