[groonga-dev,00845] mroongaでの分かち書き検索方法を教えて下さい

アーカイブの一覧に戻る

磯部 和広 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 ~]$


■質問■

どのようにしたら、空白区切りでトークナイズされたデータに対し
該当するトークン「だけ」マッチするように出来るでしょうか。




groonga-dev メーリングリストの案内
アーカイブの一覧に戻る