info****@webmk*****
info****@webmk*****
2016年 3月 15日 (火) 17:41:56 JST
早速の回答ありがとうございます。 現状の仕組みについてはひとまず理解いたしました。 ノーマライザーの扱い方を考えながら開発を進めてみます。 On 2016/03/14 23:33, Kouhei Sutou wrote: > 須藤です。 > > In <56E67****@webmk*****> > "[groonga-dev,03978] tokenizeとtable_tokenizeとの結果の違いについて" on Mon, 14 Mar 2016 17:46:55 +0900, > "info****@webmk*****" <info****@webmk*****> wrote: > >> 以下のコマンド(Groongaまたはmroonga_command)で、 >> >> tokenize TokenMecab 'Wi-Fi' >> >> 及び >> >> table_tokenize contents#content 'Wi-Fi' >> >> を実行すると、それぞれで結果が違ってきます。 > ... >> MySQLのテーブル「contents」に正しくトークナイザーが設定されていれば、本 >> 来は、どちらも同じ結果になると思うのですが、この認識は合っているでしょうか? > > あぁ、すみません。 > あっていないです。 > > 実は、もうひとつ関係する要素があるんです。それがノーマライザー > です。 > >> なお、Groongaコマンドの「table_list」の出力結果の一部は以下となってお >> り、トークナイザーは正しく設定されているようです。 >> >> [2] => Array >> ( >> [0] => 324 >> [1] => contents#content >> [2] => mroonga_test.mrn.0000144 >> [3] => TABLE_PAT_KEY|PERSISTENT >> [4] => ShortText >> [5] => >> [6] => TokenMecab >> [7] => NormalizerAuto >> ) > > ↑だとNormalizerAutoとなっているやつです。 > > Groongaはトークナイズする前にノーマライズするんです。 > NormalizerAutoは「Wi-Fi」を「wi-fi」にノーマライズします。 > > そのため、TokenMecabは「wi-fi」を解析します。 > これは、辞書に登録されている「Wi-Fi」とは異なるので、 > > * wi > * - > * fi > > とトークナイズされています。 > > 次のように全文検索用のインデックスを作るとノーマライザーを使 > わなくなるので「Wi-Fi」とトークナイズされます。 > > FULLTEXT INDEX (column) COMMENT 'normalizer "none"' > > ただ、半角カタカナ→いわゆる全角カタカナのようなノーマライズ > も無効になります。 > > > トークナイズ後にノーマライズする機能が必要なのかもしれませ > ん。。。(トークンフィルターで実現できるはず。) > >> 「tokenize TokenMecab 'Wi-Fi'」の結果も、「table_tokenize >> contents#content 'Wi-Fi'」の結果も同じであることが正しい動作と考えている >> のですが、もし、認識違いや設定のミス、確認しておいた方がいい点などありま >> したらご教授願えませんでしょうか? > > 実は、「tokenize TokenMecab 'Wi-Fi' NormalizerAuto」だと同じ > 結果になるんです。 > > > ぜんぜん気をつけるポイントを洗い出せてなくてすみません。。。 > >