MySQL+Senna/Tritonnについて調べた

検索関連の技術に疎かった&MySQL+Sennaアーキテクチャをあまり理解してなかったので調べてみた。

Tritonnとは

TritonnMySQLから全文検索エンジンSennaを利用可能にするためのプロジェクト
http://qwik.jp/tritonn/about.html

MySQLにおける全文検索

http://dev.mysql.com/doc/refman/4.1/ja/fulltext-search.html

バージョン 3.23.23 以降、MySQL ではフルテキストインデックスと全文検索をサポートしています。 MySQL のフルテキストインデックスは FULLTEXT 型のインデックスです。 FULLTEXT インデックスは MyISAM テーブルにのみ使用され、CHAR 型、VARCHAR 型、TEXT 型のいずれかのカラムから作成することができます


FULLTEXT型インデックスは、転置インデックス(キーワードから文書IDと出現位置を引けるインデックス)により実装されている。が....

  • 日本語データに対する全文検索を行うための十分な機能が実装されていない
  • 全文検索を行うための実装面での十分な高速化が行われていない

Tritonn アーキテクチャ

f:id:kotaroito2002:20110914211952g:image
出典: http://qwik.jp/tritonn/

MySQLのFULLTEXTインデックスの処理にMyISAMのビルトインのFULLTEXTではなく、Sennaを使うようにソースコードを改変しています。

インデックスタイプ

NGRAMインデックス, 単語インデックス, DELIMITEDインデックスを選択可能である。NGRAMがデフォルト。

NGRAM

N-gramは文書をN文字ずつに切り出した見出し語を元に、転置インデックスを作成する方法(http://gihyo.jp/dev/serial/01/make-findspot/0005)。

USING NGRAMと指定すればNGRAMインデックスになる。

単語インデックス

USING MECABと指定すると、単語インデックス(形態素解析による)が使われる。

DELIMITEDインデックス

空白で区切られた文字列単位でインデックス作成


性能評価

http://qwik.jp/tritonn/perftest.htmlを参照