Tasuku SUENAGA
a****@razil*****
2007年 3月 1日 (木) 17:23:00 JST
うたださま、 末永です。 > Senna-1.0.1(Ngram)+2indパッチの環境で、ソート処理を含む > 一部の単語で応答が極端に遅くなってしまうのですが、(特に、結果がない場合) > 何か改善策はあるでしょうか? 検索結果が少なそうな場合には、 FORCE INDEXを外してあげれば高速になると考えます。 MySQLバインディングが、どのような処理をしているのかを説明します。 ●2indパッチを利用しなかった場合: 以下のような処理を行っております。 1. 検索結果をSennaから取得 2. 1.の結果に含まれる全レコードを読み込み、numに基づいてソート 3. ソートした上位10件を返す よって、 1.の件数が多ければ多いほど、 2.のレコード読み込み処理で時間がかかってしまいます。 LIMITの件数は3の処理だけに影響を持ちます。 ●2indパッチを利用した場合: 以下のような処理を行っております。 1. 検索結果をSennaから取得 2. インデックスに基づいて順番にレコードを読み込む 3. そのレコードが1.の検索結果に含まれていれば、結果セットに追加する 4. 結果セットが10件未満であれば、2.へ戻る よって、 2indパッチでLIMITが指定されている場合には、 1.の件数が少なければ少ないほど、 2.〜4.の処理で時間がかかってしまいます。 その代わり、インデックスの順番どおりにレコードを読み込むため、 2indパッチを利用しない場合に比べて 無駄なレコードを読むことは少なくなります。 本来は、2indパッチ側で ・検索件数が少なければ2ind無効 ・検索件数が多ければ2ind有効 というハンドリングをしてあげたほうがいいと思いますが、 現在はそういうロジックは入っていません。 将来的には、 Senna本体で属性情報を持ち、 それに基づいた絞込やソート機能を実装することにより 問題を解決したいと考えております。 --- Tasuku SUENAGA <a****@razil*****>