磯部 和広
k-iso****@rozet*****
2012年 5月 11日 (金) 21:16:05 JST
はじめまして。 先程入会致しました磯部と申します。 早速ですが首題の件について質問させて下さい。 現在、既にトークナイズされた日本語情報を保持しております。 これを検索したく思っております。 ■背景■ 下記を参考に、設定を致しました。 3.3.1.3. 全文検索用パーサの変更 http://mroonga.github.com/ja/docs/userguide/storage.html#how-to-specify-the-parser-for-full-text-search 環境はCentOS5.7 x64で、下記方法でインストールしました。 http://mroonga.github.com/ja/docs/install.html#centos-5 また、使用したテーブルの定義とデータは下記のとおりです。 use test; CREATE TABLE `test_data` ( `english` text NOT NULL, `japanese` text NOT NULL, `japanese_splitted` text NOT NULL, FULLTEXT KEY `english` (`english`) COMMENT 'parser "TokenDelimit"', FULLTEXT KEY `japanese_splitted` (`japanese_splitted`) COMMENT 'parser "TokenDelimit"' ) ENGINE=mroonga DEFAULT CHARSET=utf8; INSERT INTO `test_data` VALUES ('inflammable liquid','引火性液体','引火 性 液体'); ■状況■ 下記のように、「引火性」「液体」とトークナイズしてあるのに、 トークンではなく前方一致でのマッチとなっています。 [k-isobe @ PMJ-DB1 ~]$ for s in 引火性 引火 引 火性 火 性 液体 液 体 性液 ; do echo "select '$s', count(1) from test_data where match(japanese_splitted) against ('$s');"; done | mysql -u root test -N 引火性 1 引火 1 引 1 火性 0 火 0 性 0 液体 1 液 1 体 0 性液 0 [k-isobe @ PMJ-DB1 ~]$ 英語でも同じ状況です。 [k-isobe @ PMJ-DB1 ~]$ for s in i in inf n l nf inflammable liquid ; do echo "select '$s', count(1) from test_data where match(english) against ('$s');"; done | mysql -u root test -N i 1 in 1 inf 1 n 0 l 1 nf 0 inflammable 1 liquid 1 [k-isobe @ PMJ-DB1 ~]$ また、全てのトークナイザーを使ってテストしましたが、同様に全て「引」で マッチしてしまいます。 [k-isobe @ PMJ-DB1 ~]$ echo "show tables" | mysql -u root test | egrep '^t_' | while read t ; do echo "select '引', count(1), '$t' from $t where match(japanese_splitted) against ('引');"; done | mysql -u root test -N 引 1 t_TokenBigram 引 1 t_TokenBigramIgnoreBlank 引 1 t_TokenBigramIgnoreBlankSplitSymbol 引 1 t_TokenBigramIgnoreBlankSplitSymbolAlpha 引 1 t_TokenBigramIgnoreBlankSplitSymbolAlphaDigit 引 1 t_TokenBigramSplitSymbol 引 1 t_TokenBigramSplitSymbolAlpha 引 1 t_TokenBigramSplitSymbolAlphaDigit 引 1 t_TokenDelimit 引 1 t_TokenDelimitNull 引 1 t_TokenMecab 引 1 t_TokenTrigram 引 1 t_TokenUnigram [k-isobe @ PMJ-DB1 ~]$ ■質問■ どのようにしたら、空白区切りでトークナイズされたデータに対し 該当するトークン「だけ」マッチするように出来るでしょうか。