2005年04月05日

前回のエントリがぐちゃぐちゃになりそうなので整理。
相変わらず、現時点で最新のrevision6のSennaが対象です。それ以外のrevisionでは役に立たないはずです。

前回のパッチをそのまま適用しても、レコードの削除を行ってからselectを実行するとGot errorが出ます。
挙動としては、削除したのにsen_index_selでヒットする文書数が減少しない物でした。

原因がわかり、パッチを作成しました。
senna(rev6用)パッチ(修正版 ver.2)を当てて、Sennaを再構築してみてください。
また、mysqlもmake installしなおす必要があります。

原因ですが、SennaのAPIにindex作成をするsen_index_addと、index削除を行うsen_index_delという関数があるのですが
それぞれ、index対象の文章を引数に指定する必要があるのです。
そして、引数に設定された文章を単語に分けてからindexの登録/削除を行っているのです(おおざっぱな説明)
で、Sennaはn-gramとmecabを利用して単語に分割処理をしますが、revision6の上記APIはなんと
sen_index_addではmecabを使って単語の分割を行い、sen_index_delではn-gramで単語の分割を行う。
という事です。

追記:パッチに不具合がありました。
addとdelで、n-gram解析をして取得する文節数に違いが有り(del時の解析がおかしかった)Got errorが出てしまっていました。
delのn-gram手法をaddに合わせたので、今度こそ平気なはず。
(だんだん、とりあえず動くパッチになってきてるな・・・)

追記2:検索結果がおかしいと思ったら、検索クエリの文字列分割処理がmecabのままだった。
クエリの字句解析もn-gramにしました。

次回以降のVerUPで修正されるだろうと思い、場当たり的にn-gramのみ対応するようにパッチを書きました。
このパッチを当てたら、多分mecabは使用されません。
多分SEN_INDEX_NGRAMを実装する手前なんだろうなぁ。


あと、某deliciousより

mysql 4.1も欲しい。

との事なので、mysql4.1.10aに対応させるパッチも作っておきました。(さらに軽い検証のみ)
パッチ後にaclocal,autoconf,automakeで普通にインストールできます。

  • mysql 4.1.10a用Sennaパッチ
  • mysql 4.0.24用Sennaパッチ
  • mysql 4.0.23用Sennaパッチ
    追記:パッチに修正を加えました。fulltextインデックスが張られているテーブルが含まれたdbをdrop databaseするとcan't rmdirが出てdrop出来ない不具合の修正です。

    Posted by Yappo at 2005年04月05日 03:44 | TrackBack | 検索システム構築
  • Comments
    Post a comment









    Remember personal info?






    コメントを投稿する前に↓の場所にnospamと入力してください。