PythonからTokyo Cabinetを操作して全文検索を実装する-データの投入と検索

2012-05-02
このエントリーをはてなブックマークに追加

PythonからTokyo Cabinetを操作して全文検索を実装する-まずは環境構築の続き。データの投入と検索です。

#! /usr/bin/python
# -*- coding: utf-8 -*-

from tokyocabinet import table

tc = table.Table()
tc.open(‘test.tct’, table.TDBOWRITER | table.TDBOCREAT)

tc[‘key’] = {‘value’: ‘Hello Tokyo Cabinet’}

#トークン転置インデックスを作成
tc.setindex(‘value’, table.TDBITTOKEN)

#これは全レコードの件数
print len(tc)

#検索
q = tc.query()
q.addcond(‘value’, table.TDBQCSTRAND, ‘Tokyo’)

#ヒットした件数
print q.count()
#検索結果の出力
for item in q.search():

print item

tc.close()

インデックスの作成は毎回やる必要はないです。コードから作成するサンプルです。これでtest.tctというデータファイルとtest.tct.idx.value.tokというインデックスファイルが作成されます。

トークンは形態素解析して半角スペースでつなげたものを使いました。サンプルはその部分を割愛しましたが、「私負けましたわ」という文章を突っ込む場合には「私 負け まし た わ」となります。

相変わらずMeCabのお世話になってます。

正直パラメータとかは自信無いです。間違ってたらごめんなさい。

某QAサイトからサンプルデータをちょっとお借りして、200万件ほど投入して検索してみましたが、20ミリ秒くらいでヒット件数とレコードを取得できました。

手軽で高速。これはいろいろ活用してみたいですね。