中級プログラマの自宅でPHP ブログ

自宅用ポータルシステム「MyHome Portal」をオープンソースで公開。MyHome Portalの説明とエンハンス情報。

Google App Engineで全文検索

Google App Engine全文検索のテストサイトを作成してみました。

全文検索 on Google App Engine

http://2ndmytest.appspot.com/zenbunn

ブログ「星屑日記」でGoogle App Engine用の全文検索Pythonソースを公開されていたので、これを使いました。

コアな部分のロジックは、数十行しかない非常にシンプルなものです。N-gramなど、ロジックの詳細は理解できていませんが、完璧に動作しているように思えます。素晴らしい!!!。ドロップさん、ありがとうございます。

≪星屑日記:Google App Engine全文検索

http://d.hatena.ne.jp/intheflight/20100107/p1

http://d.hatena.ne.jp/intheflight/20100113/p1

残念なのは1文字の検索ができないことです。英文では必要ないと思いますが、日本語では1文字の検索は欲しい。

どの程度のデータ量まで、実用レベルのレスポンスで返ってくるのかは分かりませんが、全文検索がこんなにシンプルに実現できることに驚きです。

星屑日記のドロップさんが、「作りながら思ったことは、小さい全文検索システムなら正規表現で探したほうが速いんじゃないか」と書かれていたので、このN-gram全文検索と、データストアからText.all()で全件取得して正規表現でre.search()する方式を選択できるようにしてみました。100件程度のデータからの検索で試した限りでは、単純に正規表現で検索する方が速い場合が多いようです。ちょっと、残念。

英単語は小文字・大文字区別なく、検索できた方が嬉しいので、一部修正して使っています。と言っても、インデックスと検索文字列にそれぞれtext.lower()を追加しているだけです。

検索結果は登録最新順に並び替えるようにしています。N-gramの場合、検索結果をリストにした上で、.sort(key=operator.attrgetter('created'), reverse=True)を実行しているだけです。処理時間には並び替え時間も含んでいます。

現在、新規の文章追加は出来なくしてあります。