Help us understand the problem. What is going on with this article?

Mroonga5.10ではノーマライザーをオプションで指定すると全文検索クエリ以外では利用されない

More than 5 years have passed since last update.

Groonga Advent Calendar 2015の14日目の記事です。

Mroongaでは以下のようにCOMMENTにnormalizer "NormalizerAuto"などと書くことにより全文検索時に利用するNormalizerを変更することができます。

CREATE TABLE IF NOT EXISTS `tags` (
  `tag` varchar(255) NOT NULL,
  `text` varchar(1000) NOT NULL,
  PRIMARY KEY (`tag`),
  FULLTEXT KEY `text` (`text`) COMMENT 'normalizer "NormalizerAuto"'
) ENGINE=Mroonga DEFAULT CHARSET=utf8;

このようにすることでたとえば㍑をリットルで全文検索できます。

mysql> INSERT INTO tags VALUES("Hoge", "㍑");
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM tags WHERE MATCH(text) AGAINST("リットル" IN BOOLEAN MODE);
+------+------+
| tag  | text |
+------+------+
| Hoge |   |
+------+------+
1 row in set (0.00 sec)

しかし、2015/11/29リリースMroonga5.10時点では、全文検索以外の一致検索には通常の照合順序が使われます。デフォルトだとutf8_general_ciが使われます。

mysql> SELECT * FROM tags WHERE text = "リットル";
Empty set (0.00 sec)

mysql> SELECT * FROM tags WHERE text = "㍑";
+------+------+
| tag  | text |
+------+------+
| Hoge |   |
+------+------+
1 row in set (0.00 sec)

これではちぐはぐですね。そのうち、なんとかしたいです。

解決編

Mroongaで全文検索以外でGroongaのノーマライザーを使う方法

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away