[groonga-dev,01614] Re: mroongaログのtoo many postingsの警告メッセージの影響について

Back to archive index

Naoya Murakami visio****@gmail*****
2013年 8月 13日 (火) 03:16:01 JST


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

本件につきまして、当方で試行錯誤で調査したところ、先ほどのメールの質問は間違いでサイズの問題
ではなかったと思われるので取り下げさせてください。
調査内容と訂正した質問を以下に記載しますので、長文で大変恐縮ですがご確認のほどよろしくおねがいします。

<調査内容>

1.以下の定数を増加させて(根拠はないが、1ffffを1fffffに)、ビルドしてみたところ、
以前では、too many postingsがでていたクエリでtoo many postingsが発生しなくなりました。

https://github.com/groonga/groonga/blob/master/lib/ii.c
2213 #define GRN_II_MAX_TF 0x1ffff


2.上記を修正しましたが、mroonga経由では、too many postingsが発生していた場合であっても、
too many postingsが発生していない場合であっても、文末が検索できて区別がつかず、
どこのトークンが捨てられているかが特定できませんでした。

そこで、too many postingsが発生した場合のテーブルと上記定数を修正して、
too many postingsが発生していない場合のテーブルにたいして
select mroonga_command('select ftext_test-ftext --limit 0');により
トークン数を比較してみましたが、トークンの数(種別)は同じ数91621でした。
[[[91621],[["_id","UInt32"],["_key","ShortText"],["index","ftext_test"]]]]

3.次に、ログをみると、too many postings(150985) on 1014. discarded 19914.となっており、
TIDが1014のものが捨てられた。とあるので、_IDが1014のテーブルのトークンを確認しました。
select mroonga_command('select ftext_test-ftext --filter \"_id == 1014\"');
[[[1],[["_id","UInt32"],["_key","ShortText"],["index","ftext_test"]],[1014,",",4]]]

カンマ(,)のトークンなので、出現回数が非常に多いんだろうなぁと思いました。

4.そこで、上記定数を修正せずに構築したテーブルでカンマを含む文書で全文検索したところ、
文頭のカンマを含む文書は検索でき、文末のカンマを含む文書は検索できませんでした。
上記定数を修正したテーブルでは、文末のカンマを含む文書であっても検索ができました。


<訂正質問>

>文書の後半にあるトークンは捨てられているので、文書の後半にあ
>る内容ではヒットしないのではないかと思います。

(1)ここでいう、文書の後半にある捨てられるトークンというのは、「131071回以上出現する
トークンであって、131071回目以降に出現するトークンの文書中の出現位置情報が捨てられる」
ということでよろしいでしょうか?(すなわち、131071回以上出現するトークンであっても、
文書の前半部分で出現するトークンは検索できる。)

(2)上記定数の他への影響がわかりませんが、大きな文章の場合でも対応できるよう、
このパラメータの上限の見直しまたは、チューニングできるようにできないでしょうか?
(このパラメータだけでいいのかどうかはわかりませんが。。)


(3)too many postingsはwarningメッセージとなっており、ログレベルがデフォルトの
noticeだと、mroongaでインデックスを構築していても処理がストップしないため、
nterms=10417 chunk=132123 total=820等のnoticeに埋もれてしまい気にせず
読み飛ばしてしまっていました。ユーザに検索に影響があるwariningであることが
わかりやすくなるといいかもしれません。
(discardで捨ててるというのでわかるので十分なのかもしれませんが。。)

1つのトークンサイズが大きい場合のtoo long の場合は、エラーで処理がとまっていたので、
インデックス構築ができないことがわかりました。
次回のリリースで、1つのトークンが大きい場合のtoo longは、warningメッセージに
なって処理がとまらなくなりましたが、4kbyte超のトークンがlogに表示されますし、
ignore too long tokenと詳細なメッセージが記載されていて目立つのでこちらは、
わかりやすいと思います。


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



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