2010年6月10日木曜日

Google App Engine で全文検索を実装(Python)

もちろんPythonです。Javaじゃありません。

ともかく、一応SearchableModelというクラスで全文検索らしきことができるのですが、
当然マルチバイトなんて知らないわけです。
まあ、こんな感じで使いますが。

def Hoge(SearchableModel):
id = db.IntegerProperty()
name = db.StringProperty()

q = Hoge.all().search("hoge")


問題点としては、
・スペース区切りで単語を分ける(日本語はどないすんのじゃ)
・二文字以下はインデックスしない(そりゃ英語はいいわな、それで)
・検索する単語も二文字以下はなかったことになる(絞り込みできない)

ところが、こちとら日本人な訳で、なんとかせにゃならん訳です。
GAEだと分かち書きエンジン導入も面倒だし。
で、検索対象の文字列が50文字程度なら、こうしたらいいのでは?と。

・N-Gramもどき(一文字、二文字、三文字…で文章を分割)で文字列を分割
・これで出来た文字列の二文字以下のものは、マルチバイト文字列の何かを足して三文字にする(足した文字は検索でも使う)
・これらをスペースで繋げて、インデックス用プロパティに保存
・後はSearchableModelが勝手にインデックス化

実際に実装したところ、きちんと日本語で全文検索できてます。
これで少しは役に立つかな?

0 件のコメント: