mail_babir****@yahoo*****
mail_babir****@yahoo*****
2013年 4月 21日 (日) 04:28:26 JST
お世話になっております。
田辺と申します。
前回に引き続きmroongaを利用していたところ、気になる挙動がありましたので、ご連絡させて頂きました。
mroongaはwingリポジトリのものを利用しています。
mroonga_version 3.02
mroonga_libgroonga_version 3.0.2
MySQL 5.5.30
具体的には、mroongaストレージモードにてutf8_unicode_ci指定のカラムにて、検索時に半角文字が全角文字と同一視されていないという点です。
以下再現手順となります。
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`main` varchar(255) NOT NULL COLLATE 'utf8_unicode_ci',
PRIMARY KEY (`id`),
FULLTEXT INDEX index_name (`main`) COMMENT 'parser "TokenDelimit"'
) ENGINE=mroonga DEFAULT CHARSET=utf8;
INSERT INTO `test`(`main`) VALUES ('ぶらっく black');
INSERT INTO `test`(`main`) VALUES ('ブラック');
SELECT * FROM `test` WHERE MATCH(`main`) AGAINST('ブラック');
「ぶらっく black」のみヒット(全角カタカナ検索)
SELECT * FROM `test` WHERE MATCH(`main`) AGAINST('ブラック');
「ブラック」のみヒット(半角カタカナ検索)
SELECT * FROM `test` WHERE MATCH(`main`) AGAINST('BLACK');
0件ヒット(全角英字検索)
MySQLの仕様ではutf8_unicode_ci使用時は半角と全角は同一視して検索されるため、上記検索結果はそれぞれ2件、2件、1件となるはずですが、mroongaでは全角と半角とで区別して検索が行われているようです。
utf8_unicode_ci使用時には、全角半角を区別しての検索需要はさほどないと思いますので、こちらはMySQLの仕様通りに動作するようご調整頂けると有り難いです。
あるいは、今回の挙動は残しつつ、新しく全角半角を同一視する照合順序を追加して頂いていも良いかと思います。
また、MySQLでは
SELECT * FROM `test` WHERE MATCH(`main`) AGAINST('フラッグ');
での検索に対して「ぶらっく black」がヒットする仕様となっており、こちらはmroongaでも同様かと思います。
ただ、個人的には濁音・半濁音・「ぁ」「ぃ」「ぅ」「ぇ」「ぉ」「っ」などは区別しつつ、カタカナとひらがなは同一視したいという場合もあります。
具体的には「フラッグ」の検索結果に「ブラック」や「ふらつく」などが含まれると困る場合が多々あります。
MySQLの仕様とは異なるのですが、もし可能でしたら、これらを実現できる照合順序を追加して頂けると非常に助かります。
これができないために、ひらがな・カタカナを同一視する用途にも関わらず、utf8_unicode_ciを使うことができない場面が多々ありますので。
それでは、大変お手数ではございますが、以上よろしくお願い致します。
田辺公平