Search::Saryer 〜導入編〜

saryを使ってみました。

何かと言うと

sary は Suffix Array のライブラリとツールです。Suffix Array と呼ばれるデータ構造を用いることにより、 10MB, 100MB といった巨大なテキストファイルに対する高速な全文検索を実現します。特定の個所だけにインデックスポイントを割り当てることにより、特定のフィールドのみを検索対象にすることもできます。

との事。

最大の特徴はMecabとかと違い文を解析しないというところでしょうか。
要は「word like '%文字%'」と等価という事ですな。

というわけで導入編。

# apt-get install sary

でさっくり入りました。ありがたや。

続いて

$ wget http://namazu.org/~tsuchiya/perl/Search-Saryer-0.30.tar.gz
$ perl Makefile.PL
$ make

で下の二つが無いと怒られたので、

# apt-get install libsary-dev
# apt-get install libglib2.0-dev

の上、再度

$ perl Makefile.PL
$ make
$ make test
# make install

で無事入りました。

続いて検索対象となるテキストファイルを作成。
例)キン肉マン超人リスト

search_index.txt

1:8マン(エイトマン)
2:ANIMAL MAN(アニマルマン)
3:BUKIボーイ(ブキボーイ)
4:Fマン(フラッシュマン)
6:アクロバット星人
・
・
・
257:木・木・人(モクモクジン)
258:夜叉武(やしゃむ)
259:与作
260:翔野ナツ子
261:麒麟男(キリンマン)

そして、mksaryコマンドでINDEXを生成。

$ mksary search_index.txt
index:  100% |ooooooooooooooooooooooooooooooooooooooooo| Time: 00:00:00
sort:   100% |ooooooooooooooooooooooooooooooooooooooooo| Time: 00:00:00

同一ディレクトリにsearch_index.txt.aryが生成されました。

saryコマンドで検索できるか確認。

$ sary "キン" search_index.txt
21:ヴァイキングマン
46:キング・ザ・100t
47:キング・トーン
48:キングコブラ
49:キンターマン/クンターマン
50:キン骨オババ
51:キン骨マン
52:キン肉アタル
53:キン肉タツノリ
54:キン肉マン
55:キン肉マングレート
56:キン肉マンスーパー・フェニックス
57:キン肉マンゼブラ
58:キン肉マンソルジャー
59:キン肉マンビッグボディ
60:キン肉マンマリポーサ
61:キン肉小百合
62:キン肉真弓
63:キン肉族先祖
99:サザエキング
123:ステカセキング
135:ダイキング
154:ネプチューンキング

無事検索できました。

今回はここまで。