タグ

ブックマーク / piro-suke.hatenablog.com (3)

  • Google App Engine で全文検索 - Pyro Memo

    Google App Engine には今のところ全文検索機能がないので、色々試してみた。検索処理についての知識は、Web+DB Pressの53号を読んだ程度。 やりたいことは、Twitterみたいな感じで各ユーザーが短い文章を登録するようなサービスで、その発言内容からキーワード検索したい。できれば、スペース区切りで複数のキーワードを指定して絞り込みができるようにしたい。appengineなので、インデックス作成や検索処理だけで割り当てがなくならない程度に効率的に。 下記の3つの方法を試してみた。接尾辞配列もどきn-gramもどき オーソドックスn-gram で、結果として、3番目のオーソドックスなn-gramが今のところうまく動いてるっぽい。失敗パターンにも色々学ぶところはあったので、それぞれメモをまとめておく。 接尾辞配列もどきまず最初に試したのがこれ。接尾辞配列というのは今回のサー

  • Google App EngineでフィルタしないリストはBlob化してキーで一括取得 - Pyro Memo

    使いまわせそうな方法が見つかったのでメモ。 ユーザー毎にタグを作成できるような機能を作成していて、特定のユーザーのタグを一括で取得しようとする場合、普通にタグ毎にエンティティを作成していると、200件くらいのタグをuserでfilterして取得するだけでも結構時間がかかる。 class Tag(db.Model): """key_name is user_id/tagid""" user = db.ReferenceProperty(User) name = db.StringProperty() ... tag_list = Tag.all().filter("user = ", user).order("name") 色々調べてみたところ、検索に使用しないデータはシリアライズしてzlib圧縮してBlobPropertyに入れておくといいらしいことが分かった。考えてみるとタグはユーザー

    voidy21
    voidy21 2010/03/10
    なるほどー
  • Google App Engine でエンティティの一括削除の方法を考えてみる - Pyro Memo

    EvernoteAPIを使ったWebアプリをappengine上に作ろうとしてる。たまに既存のデータを全部消してフル同期する必要が発生しそうなので、なんとかこれを最小のコストで終らせたい。 ついでに汎用的な一括削除の仕組みができたら再利用できて嬉しいな、と思って、あれこれ考えて試作してみた。 調査したところ、 TaskQueueを使えば並列で処理が行なえて、しかも同時に実行した処理は1回分のCPU時間しか消費しないらしい memcacheのincr、decrを使えばタスクが残っているかどうかが判定できそうdb.deleteやdb.putを使うと、ループでエンティティからputやdeleteを実行するより速いらしいKey.from_pathでキーだけでdb.deleteした方が速いらしいということが分かった。 TaskQueueが要で、これにどうやって削除するエンティティを振り分けるかがポ

    voidy21
    voidy21 2010/03/04
  • 1