Kawanet Blog II

アクセスカウンタ

zoom RSS tdserver - 全文検索エンジン Tokyo Dystopia の HTTP インターフェース

<<   作成日時 : 2009/05/02 01:39   >>

なるほど(納得、参考になった、ヘー) ブログ気持玉 3 / トラックバック 0 / コメント 0

Tokyo Tyrant みたいなネットワークインターフェースが欲しいなあ。(ボソ
ということで、Tokyo Tyrant の ttserver のソースコードをベースにして、Tokyo Dystopia の Core API を扱う HTTP サーバを書きました。
 
tdserver のソースコードは、CodeRepos に上げています。
http://svn.coderepos.org/share/lang/c/tdserver/trunk/
書き換え歓迎です。(C 言語)
 
Tokyo Dystopia に添付される CGI アプリケーション dystsearch.cgi は、Tokyo Dystopia を組み込みで使っています。インターフェースも HTML なのでリモートのクライアントからの操作が面倒ですし、CGI 形式でもサンプルとしては十分ですが、同時接続には向きません。

tdserver の設定〜試用手順は以下の通りです。

1. Tokyo Cabinet&Tyrant&Dystopia をインストールする


まず、Tokyo Cabinet, Tokyo TyrantTokyo Dystopia をインストールしてください。

もちろん、configure のオプションを付けずに、デフォルト配置にインストールしても構いません。

2. tdserver をコンパイルする


次に、tokyocabinet-1.4.17、tokyotyrant-1.1.23、tokyodystopia-0.9.11 の各ディレクトリに並べて、tdserver のソースコード(trunk)を svn 経由でダウンロードして下さい。
svn co http://svn.coderepos.org/share/lang/c/tdserver/trunk/ tdserver
cd tdserver
make

make でそのままコンパイルできます。
Tokyo Cabinet 等のバージョンアップでディレクトリ名が変わっている場合は、Makefile を手動で書き換える必要があります。

3. tdserver を起動する


1977番ポートで、td_base というデータベース名で起動してみます。

./tdserver -port 1977 td_base

起動すると、td_base というディレクトリが自動的に作成されます。
なお、tdserver は ttserver と同様のコマンドラインオプションを指定できます。

./tdserver -h
./tdserver: A server of Tokyo Dystopia

usage:
./tdserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-kl] [-log path] [-ld|-le] [-sid num] [-mask expr] [-unmask expr] [dbname]

マスクを指定することで、書込み禁止などのアクセス制限が可能です。

4. HTTP 経由でアクセスする


tdserver は、HTTP サーバです。それ以外のプロトコルには対応していません。
GET / PUT / DELETE の HTTP メソッドで操作を行います。(RESTful)
Perl なら、LWP::UserAgent と HTTP::Request::Common モジュールを使って操作できます。

● 登録(PUT メソッド)
perl -MLWP::UserAgent -MHTTP::Request::Common -e 'print LWP::UserAgent->new->request(PUT "http://localhost:1977/1",Content=>"hello world")->as_string;'
ID=1 の文書として、テキスト『hello world』を登録しています。
ID 番号は正の整数である必要があります。

● 読み出し(GET メソッド)
perl -MLWP::UserAgent -MHTTP::Request::Common -e 'print LWP::UserAgent->new->request(GET "http://localhost:1977/1")->as_string;'
ID=1 の文書を読み出します。(全文検索ではない)

● 検索(GET メソッド)
perl -MLWP::UserAgent -MHTTP::Request::Common -e 'print LWP::UserAgent->new->request(GET "http://localhost:1977/?q=hello")->as_string;'
『hello』の含まれる文書を Q-gram で全文検索し、マッチした ID をカンマ区切りで返します。

● 削除(DELETE メソッド)
perl -MLWP::UserAgent -MHTTP::Request::Common -e 'print LWP::UserAgent->new->request(HTTP::Request::Common::DELETE "http://localhost:1977/1")->as_string;'
ID=1 の文書を削除します。

動作確認はしていませんが、ttserver 由来で keep-alive もしてくれるのかも。
大量文書の一括登録は、HTTP 経由でなくて dystmgr importtsv の方が高速・確実と思いますが、
keep-alive を使えば実用的な速度で連続登録もできそうな気がする。

4. メモ


  • 現在のレスポンスボディは plain text だけど、実用的には XML や JSON・JSONP にも対応した方が便利そう。
  • 検索結果も ID 番号だけでなくて、テキスト本体を返すオプションが欲しい場合もありそう。
  • 正の整数に限定される ID 番号でなくて、URL とか UUID とか任意の文字列をキーに使いたいかも。
  • N-gram 方式だけでなくて、word 方式(わかち書き、または、タグ)に対応したい場合もありそう。
  • ツンツン でも、Tokyo Dystopia 本体に HTTP インターフェースが標準添付された方が便利。

テーマ

注目テーマ 一覧


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ
気持玉数 : 3
なるほど(納得、参考になった、ヘー)
面白い
ナイス

トラックバック(0件)

タイトル (本文) ブログ名/日時

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(0件)

内 容 ニックネーム/日時

コメントする help

ニックネーム
本 文
tdserver - 全文検索エンジン Tokyo Dystopia の HTTP インターフェース Kawanet Blog II/BIGLOBEウェブリブログ
文字サイズ:       閉じる