[groonga-dev,03982] Re: tokenizeとtable_tokenizeとの結果の違いについて

Back to archive index

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」だと同じ
> 結果になるんです。
> 
> 
> ぜんぜん気をつけるポイントを洗い出せてなくてすみません。。。
> 
> 




groonga-dev メーリングリストの案内
Back to archive index