[Senna-dev 499] Re: Senna0.9.0

Back to archive index

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*****>



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