今ではLucene(Java)、 Nutch(Java)、NTTデータがリリースしたオープンソースLudia(Postgresql上の全文検索)などいろいろとありますが、
どれも僕にとってしっくり来るものはありませんでした。
それは、何で全文検索なのに、高速性&データスケーラビリティを重要視してないの? ということでした。
だって、どれも、実装がJavaだったり、Ludiaに至っては、Postgresql上にインデクス 貼って、通信ベースでアプリ層とやりとりする訳ですよ。
高運用性とか拡張性、メンテナンス性 なんていうありがちなメリットはこれら全文検索システムでも見いだせると思うのですが、 はっきり言って全文検索に必要なのは、入力パタンを探すための仕組みだけです。
その他必要なものは、自分の運用環境に照らし合わせながら後から考えればよいのです。
では、全文検索に必要な仕掛けって何でしょう?
それは、grepなどに代表されるような逐次検索方式(当然SQLのLike文もそう)か、
単語(or n-gram)にインデクスを貼るインデックス方式かのいずれかです。
僕は前者が大好きで、決してインデクス方式に負けてはいないとは思うのですが、
やっぱり大規模データソースに対して安価なPCで高速検索するためにはインデクス 方式は避けて通れません。
では、インデクス方式で必要な要素技術は何か?
それは、B-Treeです。
要は、与えられた単語をインデクス化して管理する際、いかに効率的に管理・検索できるように するかという事になる訳ですが、それに対する現在の主流の技術がB-Treeなのです。
ですので、全文検索システム作りたかったら、要はこのB-Treeに基づいた技術があれば
よいのです。
だから、(本分からそれた)余計な機能がついているシステムはあまり好きではありません。
この観点で全文検索エンジンを選ぶとHyperEstraier、となります。
HyperEstraierは、
未踏プロジェクトの成果物で、平林さんとおっしゃられる方が作成・管理
しているオープンソースです。
HyperEstraierは、QDBMといわれるB-Treeベースの簡易DBの上に構築されている検索システムです。
主な仕様としては、形態素解析ベースのインデキシングとN-Gramベースのインデキシングのサポートや、 規模が大きくなったときの対策であるP2Pベースの並列検索機能(文書並列)、クローラの付属、 類似文書検索機能の装備など、実践で使いたくなる機能が数多くサポートされています。
まだまだ、細かいところのバグもある駆け出しのオープンソースですが、将来性が期待できる、かつ、
日本発のオープンソースであり、非常に期待が出来ます。
長くなりましたので今回はインストールだけにとどめますが、以後、クローラや検索設定の仕方など
も紹介して行ければと思います。
以下がインストール方法です。
Debianの場合
1 | $ sudo apt-get install hyperestraier |
その他Linuxプラットフォームの場合
形態素解析ベースのインデキシングをしたい人のために「--enable-macab」を付けて コンパイルしていますが、これはオプショナルです。
自分はN-Gramでいいやいという人は 付ける必要はありません。
また、「--enable-mecab」を付ける人は当然ながら、MeCabを インストールしてくださいね。
またお使いのプラットフォームによってはzlibという圧縮ライブラリが必要となる場合がありますので その場合はそれもインストールしてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | # libiconvのインストール $ ./configure $ make $ sudo make install # QDBMのインストール $ ./configure --enable-zlib $ make $ sudo make install # hyperestraeirのインストール $ wget http://hyperestraier.sourceforge.ne t/hyperestraier-1.4.13.tar.gz $ ./configure --enable-mecab $ make $ make check $ sudo make install |