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ミリ秒くらいでヒット件数とレコードを取得できました。
手軽で高速。これはいろいろ活用してみたいですね。