Kouhei Sutou
kou****@clear*****
2013年 8月 30日 (金) 11:28:02 JST
須藤です。 In <CANM+Hhc=iBUz+np28wabCrxnuH6_tiugK****@mail*****> "[groonga-dev,01729] Re: grn_str_charlen_utf8のwarningメッセージの影響について" on Fri, 30 Aug 2013 07:11:55 +0900, Naoya Murakami <visio****@gmail*****> wrote: > 1.grn_str_charlen_utf8(): imcomplete character > > このメッセージが出力されるケースが特定できました。 > ベクターカラムに対して、"区切り文字データなし"をinsertした後に、 > selectすると、うまくデータを取得できません(NULLが入るんですかね)。 > これをinsert into A select * from Bすると、このメッセージが発生します。 > > ベクターカラムに投入したデータに問題があったようです。 > > 既存のテーブルをgroup_concatしただけで、結構、 > "データ1区切り文字区切り文字データ2"となっているケースがあったので、 > 投入するデータをチェックして、区切り文字の後にデータがない状態が > 発生しないようにしてベクターカラムに投入したいと思います。 > > "データ1区切り文字区切り文字データ2"をinsertとすると、 > データ2(下のケースだと"ぐるんが")が無視されますが、 > この挙動が正しいのかどうかよくわかりません。よければ、ご検討ください。 はい! 再現方法も一緒にもらえてとても助かります。動作を確認して、ど うなるのがよいか検討します。(「データなし」を無視してもいい かなぁという気はしています。) > 2. grn_str_charlen_utf8(): first byte is invalid >>例えば、以下のように不正なUTF-8文字を含んでいる場合、 >> Hel${不正なUTF-8文字}lo World >>「lo World」以降は無視される処理になっていることがほとんどなはずです。 > > このような不正文字は、おそらく文章の途中で区切られているケースはあまり > ないと思われます。 > なので、以下のようにトークナイズしてくれていたら影響が少なくうれしいなと > 思っています。それとも、やはり後ろに続くHello World.まで無視されてしまう > のですかね。。 > > Good Bye World.${不正なUTF-8文字}Hello World. > ↓ > Good | Bye | World | . | Hello | World | . > > トークンを切り出した後に無視されるのか、それとも文章に不正文字が1つでも > 含まれていたら、不正文字の後の全部が無視されるのかで影響度がかなり違うので、 > このあたりを知りたいなぁと思ってます。 > たとえば、数千文字の文章で先頭1文字目で不正文字がでてきたら、文章全体が > 無視されてしまう? はい、文書全体が無視されます。。。 > このメッセージがでる文章を特定できたら、実際のトークナイズされ方を見ることが > できると思いますが、オフラインインデックス構築中に稀に見かける程度なので、 > どの文章でこのメッセージがでているのかを特定するのが大変なのですよね。 ですよね。 > この警告メッセージが出力される文章および不正文字の出現位置を簡単に > 特定する方法はありますか? groongaのloadコマンドはいい感じにログに出してくれるようにし ていますが、mroongaの場合はしていないんですよねぇ。 > ソースを一時的に書き換えてこのメッセージをエラーにしておけば、処理がとまって > 特定できますかね? > それか、前に教えていただいたようにして、gdbでbreak str.c:44とかしておけば、 > ブレークしてとまってくれるのですかね? > > https://github.com/groonga/groonga/blob/b6f34484726019881d2466d979cc45cd3afd2c12/lib/str.c#L44 あ、ここのエラーメッセージを https://github.com/groonga/groonga/blob/master/lib/normalizer.c#L566 のエラーメッセージのようにすれば該当テキストが表示されていい かもしれません。 str.cにあるこの関数とnormalizer.cにあるこの関数を一緒にした いんですが、まだ手付かずなんですよね。。。早く整理しない と。。。 > --------------------------------------------- > 以下でgrn_str_charlen_utf8(): imcomplete characterを再現することができます。 > ご参考まで。 ありがとうございます!とても助かります! -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html