2011年4月23日土曜日

Whooshで始める全文検索的なもの(2)

前回作ったのをGAEに乗せました。ファイルのロックがかけられなくてエラーになるので、そこだけ手を加えました(gae_fileindex.py, gae_filestorage.py)。

最初はIgoTokenizerで試していましたが、GAEに載せたらメモリ&時間食い過ぎで毎回インスタンスが停止されてしまうので、TinySegmenterに変えたらだいぶ良くなりました。

まあ、まだ試してないけど、GAEのStorageを使ってインデックスが作れるのでそっちを使った方が良いかと思います。GAEのStorageを使わないで、ファイルベースのインデックスをGAEで使うメリットは、ローカルで作ったインデックスがそのままGAEでも使えることぐらいだと思います。

リクエストを受けて検索するところ
def get(self):
        qs = self.request.get('q')
        q = self.qp.parse(qs)
        h = self.s.search(q, limit=50)
        template = self.env.get_template('main')
        self.response.out.write(template.render(results=h))

表示テンプレート
<span>ヒット総数{{results.estimated_length()}}ぐらい</span>
{#{{results.key_terms('title')}}#}
  <ol>
{% for item in results %}
    <li><a href="{{item['url']}}">{{item['title']}}</a>({{item.score}})
      <ul><li>{{item.highlights('content')}}</li></ul>
    </li>
{% endfor %}
  </ol>

0 件のコメント:

コメントを投稿