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

Back to archive index

Naoya Murakami visio****@gmail*****
2013年 8月 13日 (火) 18:00:49 JST


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

度々の質問へのご回答ありがとうございます。
またまた、長文で大変恐縮ですが、ご確認よろしくお願いします。

1.トークンの位置情報が捨てられた場合の影響について

>検討してみますが、それにあたってユースケースを教えてもらえな
>いでしょうか?トークンの位置情報が捨てられたときに問題になる
>のは、文書の後半にある内容をフレーズ検索したいときだけじゃな
>いかと思っています。

カンマとかの単語を構成し得ないトークンであればフレーズ検索にしか
影響ないですが、かなり大きいサイズの日本語文書をバイグラムし、
後半のバイグラムトークンが抜けおちると、
後半部分のバイグラムトークンで構成され、且つ、文章中の後半にしか
でてこない単語が検索できないケースがでてくると思われます。

たとえば、「アイス」という単語を検索したい場合を考えると、
文章の前半部分に、イスが131071回出現し、且つ、
この間、アイスが1回も出現せず、その後、文章の後半部分に
「アイス食いたい。」という文書がでてきた場合、「イス」が捨てられて
この文章の部分のトークンは、「アイ」、「ス食」、「食い」になると
思われます。
この場合、「アイス」の単語を検索すると、検索トークンは、
「アイ」、「イス」になり、文章中に一回も出現せず一致しない
んじゃないかなぁと考えました。

mecabや空白区切りでトークナイズすれば、たいして問題にならないかも
しれませんが、バイグラムでトークナイズするの場合は、単語を構成しうる
部分が喪失することになるので、ありえない話じゃないんじゃないかなぁと
考えました。

まあ、このようなケースが発生するのは、相当稀でしょうし、実際に発生するのか
どうかはわかりません。ただ、too may postings自体は結構な頻度で発生します。

2.インデックスされたトークンの出現回数の抽出について

実際に、カンマのほかにどういうトークンが捨てられるのかなぁと確認しようと、
rroongaのdump_indexでトークンの出現回数を調べようと思いましたが、
rubyの環境構築および利用に相当なれてなくて、ruby-1.93では、以下のチュートリアル
にある、$KCODEが無視されてdumpできず、1.8,2.0系では、それ以外の部分で
エラーになり諦めました。
http://ranguba.org/rroonga/ja/file.tutorial.html

irb --simple-prompt -rubygems -rgroonga
>> $KCODE = "UTF-8"
(irb):1: warning: variable $KCODE is no longer effective; ignored
>>
Groonga::Database.open("/var/lib/mysql/mrn_storage.mrn").dump_index("dumplist")
ArgumentError: invalid byte sequence in UTF-8

Q.トークンの種別は、groongaのテーブルを覗けば見れますが、出現回数までは、
rroongaのGroonga::dump_indexでindexをダンプするか同じことをAPIで
つくらないとできないという認識でよろしいでしょうか?
http://ranguba.org/rroonga/ja/Groonga/Database.html#dump_index-instance_method

ログレベルの抽出は教えていただいた内容等で抽出して、監視できるようにしたいと思いますが、
ignore too long tokenと同様に、位置情報が捨てられるトークンが、warningメッセージで
わかるとわかりやすいかもしれません。

3.補足

もちろん、有償のサポート契約を結んでいるわけでもなく、そこまでいろいろと細やかな
対応をお願いできないので、これらは、そうだったらいいなという願望なだけです。

これは、こちらの勝手な事情なので、聞きながしていただいてかまいませんが、
実は、今のテーブル構成では、フルテキストインデックスのみで、AND検索が
できるように、カラムの最後に本文と区別されうる形式(ユニークなタグで囲んで)
で多数の書誌情報等を追加しています。
この書誌情報のバイグラムトークンが捨てられる可能性があるというのは痛いなぁ
と思ってます。

巨大なテーブルでできるだけ速度をだせるように、あとで思いついたので、
今は、書誌情報が最後にいますが、書誌情報のカラムを先頭に移すことで、
トークンが捨てられる不安からは解消できますので、どうしても、対応が難しい
ようでしたら、こちらでテーブルを再構成します!
(テーブルが非常に多く大変ですが。。。)

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



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