[groonga-dev,01774] Re: grn_str_charlen_utf8のwarningメッセージの影響について

Back to archive index

Naoya Murakami visio****@gmail*****
2013年 9月 15日 (日) 02:51:18 JST


お世話になっております。村上です。

>はい!
>再現方法も一緒にもらえてとても助かります。動作を確認して、ど
>うなるのがよいか検討します。(「データなし」を無視してもいい
>かなぁという気はしています。)

ベクターカラムにmroongaからinsertした際に、区切り文字が連続した場合に、
データの投入に失敗する件について、データ移行に不便だったので、
lib/token.cのgrn_token_nextに、サイズが0のトークンを無視するように追加してみました。

この対応を公式に追加していただくことは可能でしょうか?

他へ影響があってむずかしいようであれば、手前のトークナイザ側でサイズ0の
トークンをプッシュしないように手を加えようと思います。

https://github.com/naoa/groonga/commit/22a5f9982caadd951431bd1dbb8276a2d08c75c3

以上、ご検討よろしくお願いします。



2013年8月30日 11:28 Kouhei Sutou <kou****@clear*****>:

> 須藤です。
>
> 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
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
>



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