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と詳細なメッセージが記載されていて目立つのでこちらは、 わかりやすいと思います。 以上、よろしくお願いします。