Tokyo Dystopia のインストール手順~全文検索を試す

Tokyo Dystopia は、Tokyo Cabinet を利用した全文検索システム。
 
Tokyo Tyrant にあたるネットワークインターフェース(サーバ)は提供されておらず、Perl・Ruby バインディングもなく、ドキュメントも英語だけの“ツンツン”とのこと。(汗)
 
C言語用として4つの API があるが、まず低レイヤーとして、
Q-gram Database(Qグラム)または Word Database(分かち書き用)を選択できて、
上位層として、それぞれ Core API と Simple API が選択できるということか。


The Core API


ファイル構成:ハッシュ+インデックスのディレクトリ
ヘッダファイル:dystopia.h(暗黒郷?)
主な関数:
bool tcidbput(TCIDB *idb, int64_t id, const char *text);
bool tcidbout(TCIDB *idb, int64_t id);
char *tcidbget(TCIDB *idb, int64_t id);
uint64_t *tcidbsearch(TCIDB *idb, const char *word, int smode, int *np);
uint64_t *tcidbsearch2(TCIDB *idb, const char *expr, int *np);

tcidbput は登録、tcidbout は削除、tcidbget はID指定の取得、tcidbsearch は検索。
tcidbsearch2 では、以下のような複合条件が指定できる。
  • A B = AND 条件
  • A && B = AND 条件
  • A || B = OR 条件
  • "A B" = フレーズ検索
  • [[A*]] = 前方一致
  • [[*A]] = 後方一致
  • [[*A*]] = 部分一致


The Q-gram Database API


ファイル構成:インデックスのファイルのみ(実体は記録されない)
ヘッダファイル:tcqdb.h(Tokyo Cabinet Qグラム DB?)
主な関数:
bool tcqdbput(TCQDB *qdb, int64_t id, const char *text);
bool tcqdbout(TCQDB *qdb, int64_t id, const char *text);
uint64_t *tcqdbsearch(TCQDB *qdb, const char *word, int smode, int *np);

tcqdbout による削除時には、登録時の文字列を改めて指定する必要がある。

The Simple API


ファイル構成:ハッシュ+インデックスのディレクトリ
ヘッダファイル:laputa.h(空想家?)
主な関数:
bool tcjdbput(TCJDB *jdb, int64_t id, const TCLIST *words);
bool tcjdbput2(TCJDB *jdb, int64_t id, const char *text, const char *delims);
bool tcjdbout(TCJDB *jdb, int64_t id);
TCLIST *tcjdbget(TCJDB *jdb, int64_t id);
uint64_t *tcjdbsearch(TCJDB *jdb, const char *word, int smode, int *np);
uint64_t *tcjdbsearch2(TCJDB *jdb, const char *expr, int *np);

tcjdbput2 は、空白などのデリミタを指定できる。
tcjdbsearch2 も、複合条件が指定できる。

The Word Database API


ファイル構成:インデックスのファイルのみ(実体は記録されない)
ヘッダファイル:tcwdb.h(Tokyo Cabinet ワード DB?)
主な関数:
bool tcwdbput(TCWDB *wdb, int64_t id, const TCLIST *words);
bool tcwdbput2(TCWDB *wdb, int64_t id, const char *text, const char *delims);
bool tcwdbout(TCWDB *wdb, int64_t id, const TCLIST *words);
bool tcwdbout2(TCWDB *wdb, int64_t id, const char *text, const char *delims);
uint64_t *tcwdbsearch(TCWDB *wdb, const char *word, int *np);

こちらも、tcwdbout・tcwdbout2 による削除時には、登録時の文字列を改めて指定する必要がある。

Tokyo Dystopia のインストール手順


Tokyo Dystopia をインストールする前に、予め Tokyo Cabinet をインストール しておく。

wget http://tokyocabinet.sourceforge.net/dystopiapkg/tokyodystopia-0.9.11.tar.gz
tar zxvf tokyodystopia-0.9.11.tar.gz
cd tokyodystopia-0.9.11
./configure --prefix=/usr/local/tokyodystopia-0.9.11 --with-tc=/usr/local/tokyocabinet-1.4.17 && make
sudo make install

パスを指定してインストールしているので、利用時にはパスを通しておく必要がある。

export LD_LIBRARY_PATH=/usr/local/tokyocabinet-1.4.17/lib
export PATH=/usr/local/tokyodystopia-0.9.11/bin:$PATH


The Core API (Dystopia) を試す


管理コマンド dystmgr を利用して、インデックスと検索を試せる。

dystmgr create test1
dystmgr put test1 1 "foo bar"
dystmgr put test1 2 "hoge pomu"
dystmgr search test1 "foo"

検索結果として ID『1』が表示されれば成功。
test1 ディレクトリには、以下のようなファイルが作成されている。

-rw-r--r-- 1 kawanet kawanet 41984 2009-05-01 20:12 test1/0001
-rw-r--r-- 1 kawanet kawanet 8393040 2009-05-01 20:12 test1/dystopia.tch


The Q-gram Database API を試す


管理コマンド tcqmgr を利用して、インデックスと検索を試せる。

tcqmgr create test2.tch
tcqmgr put test2.tch 1 "foo bar"
tcqmgr put test2.tch 2 "hoge pomu"
tcqmgr search test2.tch "hoge"

検索結果として ID『2』が表示されれば成功。
以下のようなファイルが作成されている。

-rw-r--r-- 1 kawanet kawanet 41984 2009-05-01 20:14 test2.tch

put メソッドで1エントリずつ登録するのではなくて、
importtsv メソッドで複数のエントリを一括して登録することも可能。

しっかし、Tokyo Tyrant みたいなネットワークインターフェースが欲しいなあ。(ボソ

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 1

ナイス

この記事へのコメント

Bernie Pendarvis
2014年09月15日 09:49
Bernie Pendarvis[url=(隹�畑譁�ォ�ョセ鄂ョ荳ュ逧�次譁�得謗・鬘ケ)

]Bernie Pendarvis[/url](隹�畑譁�ォ�ョセ鄂ョ荳ュ逧�次譁�得謗・鬘ケ)

この記事へのトラックバック