10 月18th

SennaとかLudiaを使ったほうがいい理由

t-matsuda MySQL, PostgreSQL Read on

グニャラくんのグニャグニャ備忘録@はてな
[技術メモ][PostgreSQL][MySQL]DBMSデフォルト組み込みの全文検索」より

Sennaは完全転置インデックスを採用しています。

MySQLやPostgreSQLのGINは完全転置インデックスを採用していません。

ほうほう。

完全転置インデックスを採用していないと

インデックスのみで「検索できない」という文字列を検索できません。

もっと正確に言うと、「検索できない」という文字列以外のレコードがひっかかってしまうのです。

たとえば、「信頼できた検索エンジンなんてない。」という文書が引っかかってしまいます。

なぜなら、上記の文書は「信頼/でき/た/検索/エンジン/なんて/ない」と分かち書きされてしまうため、

「検索」「でき」「ない」という3つの単語を含んだ文書として判定されてしまう

こういう場合には、いったん全文検索が返してきたレコードを全件をシーケンシャルにチェックして、

「検索できない」という文字列が出現していることを確認しなければなりません。

つまり、インデックスのみで検索が完結せず、grepと同様の処理が余計に必要となっているのです。

たとえDBMSデフォルト組み込みの全件検索がutf-8に対応しても、

仮に分かち書きに対応したとしても、

それだけで高速かつ高精度な日本語検索が行うことはできないのです。

なるほどねぇ。
GINとか出てきてもやっぱ、Senna&Ludiaのほうがいいのかぁ。やっぱすげぇなぁ。


About this entry