150行で書ける全文検索エンジン

Rubyで簡単に全文検索エンジンが作れるGrnMiniを作ったの続きです。

GrnMiniを使って小さな検索エンジンを書いてみました。

1ファイル154行です。検索、マッチ個所の表示(スニペット)、ページネーション、ファイル本体の表示など検索エンジンに必要な一通りの機能が入っています。

f:id:tuto0621:20140108005433p:plain

↑はあんスマさんの青空文庫のアーカイブをインデックス化して検索している所です。

インストール

grn_miniをインストールします。

$ gem install grn_mini

sinatraが入っていない人はそちらもインストールします。

$ gem install sinatra

grn_mini/samplemini-directory-search.rbを適当な場所にダウンロードします。rawからコピーするのが簡単です。

もしくはgrn_miniをgitチェックアウトしてもよいです。

$ cd ~/Documents
$ git clone https://github.com/ongaeshi/grn_mini.git

以後はチェックアウトした~/Documents/grn_mini/sample/mini-directory-search.rbを使って説明します。

使い方

スクリプトを実行した場所以下全てのファイルを検索対象とするので、検索インデックスを作りたいディレクトリに移動します。

ファイル数が多いと時間がかかるので、最初は小さめのディレクトリで実験するのがおすすめです。

$ cd ~/Documents/foo

mini-directory-search.rbを実行します。データベースが生成された後(最初の一回だけです。)、webアプリが立ち上がります。

$ ruby ~/Documents/grn_mini/sample/mini-directory-search.rb 
Create database ..
Input complete : 15 files
== Sinatra/1.4.2 has taken the stage on 4567 for development with backup from Thin
>> Thin web server (v1.5.1 codename Straight Razor)
>> Maximum connections set to 1024
>> Listening on localhost:4567, CTRL+C to stop

http://localhost:4567/をブラウザで開いて以下のような画面が出たら成功です。

f:id:tuto0621:20140108005506p:plain

以上でインストールは完了です。思うがままに検索して下さい。検索コマンドは8.10.1. クエリー構文をどうぞ。カラム名ソースコードをどうぞ。

生成した検索用データの削除

スクリプトを実行した位置に作られるmini-directory-search.db*という名前のファイルを全て消して下さい。

$ cd ~/Documents/foo
$ rm mini-directory-search.db*