Mroonga blog

2021-11-29

Mroonga 11.10 has been released!

Mroonga is a MySQL storage engine that supports fast fulltext search and geolocation search. It is CJK ready. It uses Groonga as a storage and fulltext search engine.

Mroonga 11.10 has been released!

Changes

The main changes are as follows.

Improvements

  • AlamLinux Added support for Mroonga on AlamLinux 8.

  • AlamLinux Added support for MySQL 8.0.27.

    • There are below restrictions in the MySQL 8.0 package.

      • Wrapper mode Wrapper mode is not supported yet.

      • Storage mode Storage mode does not support the following feature.

        • The feature of relevant to the optimization.
  • AlamLinux Added support for Percona Server 8.0.26.

  • AlamLinux Added support for MariaDB 10.3.32, 10.4.22, 10.5.13, and 10.6.5.

  • CentOS Added support for MariaDB 10.2.41, 10.3.32, 10.4.22, 10.5.13, and 10.6.5.

  • Ubuntu Added support for MySQL 8.0 on Ubuntu 21.04 (Hirsute Hippo) and 21.10 (Impish Indri).

    • There are below restrictions in the MySQL 8.0 package.

      • Wrapper mode Wrapper mode is not supported yet.

      • Storage mode Storage mode does not support the following feature.

        • The feature of relevant to the optimization.

Fixes

  • CentOS Fixed a bug that we have not provided the package of Mroonga for MariaDB 10.6.

  • Optimizations Fixed a bug that Mroonga apply the optimization of row count wrongly.

    Normally, Mroonga apply the optimization of row count when the SELECT fetches only COUNT(*) and condition in WHERE can be processed only by index.

    However, Mroonga applied the optimization of row count even if Mroonga couldn't process condition in WHERE only by index as below case by this bug.

    Consequently, the result of SELECT COUNT(*) WHERE ... is wrong.

      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;
    
  • Fixed a bug that Mroonga doesn't set proper encoding on condition push down for 'STRING_FIELD ='.

    Mroonga executes condition push down for 'STRING_FIELD =' in the following case. However, Mroonga doesn't set proper encoding in search keywords at this time. Consequently, Mroonga fails to normalize search keywords.

      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;
    

Conclusion

Let's search by Mroonga!