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!

2021-11-04

Mroonga 11.09 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.09 has been released!

Changes

The main changes are as follows.

Improvements

  • CentOS Added support for MySQL 5.7.36, 8.0.27.

  • CentOS Added support for Percona Server 8.0.26.

Conclusion

Let's search by Mroonga!

2021-10-06

Mroonga 11.08 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.08 has been released!

Changes

The main changes are as follows.

Fixes

  • Fixed a bug that Mroonga crashed when we upgrade DB created by MySQL 5.7 to MySQL 8.0.

Conclusion

Let's search by Mroonga!

2021-09-29

Mroonga 11.07 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.07 has been released!

Important notice

Mroonga has had a bug that if we upgrade DB created by MySQL 5.7 to MySQL 8.0, Mroonga crashes.

We fixed this bug on Mroonga 11.08. Therefore, if you were using Mroonga on MySQL 5.7 or previous version, we highly recommended that we use Mroonga 11.08 or later.

Changes

The main changes are as follows.

Improvements

  • Ubuntu Added support for MySQL 8.0 on Ubuntu 20.04 (Focal Fossa).

    • 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.
  • mroonga_snippet_html() Added support for specifying lexicon name.

    • We can use custom normalizer in mroonga_smippet_html() by this feature as below.

      CREATE TABLE terms (
        term VARCHAR(64) NOT NULL PRIMARY KEY
      ) COMMENT='normalizer "NormalizerNFKC130(''unify_kana'', true)"'
        DEFAULT CHARSET=utf8mb4
        COLLATE=utf8mb4_unicode_ci;
      
      SELECT mroonga_snippet_html('これはMroonga(ムルンガ)です。',
                                  'terms' as lexicon_name,
                                  'むるんが') as snippet;
      
      snippet
      <div class="snippet">これはMroonga(<span class="keyword">ムルンガ</span>)です。</div>
      
  • Added support for outputting vector column values as text not raw binary.

    • We can use mysqldump for dumping vector column values by this feature.
  • Don't create .mrn files if nonexistent table is dropped.

  • Added support for W pragma against elements of vector column.

    • We can set the weight to elements of vector column by this feature. However, Mroonga only search the specified section in this case. In a normal multiple column index, Mroonga also searches not specified sections with the default weight.

Fixes

  • Fixed a bug that if we use "WHERE primary_key IN ("")" in a where clause, Mroonga may return wrong record.

    • For example, Mroonga may return wrong record as below.

      CREATE TABLE ids (
        id varchar(7) PRIMARY KEY,
        parent_id varchar(7)
      )ENGINE=Mroonga DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
      
      INSERT INTO ids VALUES("abcdefg", "");
      INSERT INTO ids VALUES("hijklmn", "");
      INSERT INTO ids VALUES("opqrstu", "hijklmn");
      
      SELECT * FROM ids WHERE id IN (SELECT parent_id FROM ids);
      +---------+-----------+
      | id      | parent_id |
      +---------+-----------+
      | abcdefg |           |
      | hijklmn |           |
      +---------+-----------+
      2 rows in set (0.00 sec)
      

Conclusion

See Release 11.07 - 2021-09-29 about detailed changes since 11.06.

Let's search by Mroonga!

2021-08-29

Mroonga 11.06 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.06 has been released!

Changes

The main changes are as follows.

Improvements

  • CentOS Added support for MariaDB 10.2.40, 10.3.31, 10.4.21, and 10.5.12.

  • CentOS Added support for MariaDB 10.6.4.

  • CentOS Added support for Percona Server 5.7.35.

  • Debian Added support for Debian 11 (bullseye).

Conclusion

See Release 11.06 - 2021-08-29 about detailed changes since 11.05.

Let's search by Mroonga!