2010-12-11 15 views
6

トピックに浮かぶスレッドがいくつかありますが、私のユースケースは多少異なると思います。私が何をしたいかGoogle App Engine(Java)の全文検索

私のGAE/Jアプリ
  • ため
    • 全文検索コンポーネントは、インデックスのサイズが小さい:25〜50メガバイトかそこら
    • 私はにライブアップデートを必要としません。インデックスは定期的に再インデックスするのが良い
    • これは自動完了などのために非常に高速である必要があります(データストアで逆インデックスを実装するとかなりの遅延が発生するという印象を受けます)

    これまでに(ちょうど計画し、まだ何を実装しようとしていない)私の戦略:RAMDirectory

    • 使用Luceneの定期的なcronジョブには、インデックスを作成し、データストアにそれをシリアル化し、更新を保存しますID(又はタイムスタンプ)
    • 検索サーブレットは、起動時にインデックスをロードしRAMDirectoryで
    • 各サーブレットは、現在の更新IDをチェックし、必要に応じて、インデックスを再ロード要求を作成

    私があまり気にしていない主なことは、インスタンス間でメモリ内のデータを同期する方法です。これは動作するのでしょうか、何か不足していますか?

    また、メモリ使用上の問題が発生する前に、どれくらい前にプッシュすることができますか? GAEのRAMクォータで何も見つかりませんでした。 (この指数は小さいですが、私は追加したいことを考えています)

    もちろん、より良いアプローチについての考えはありますか?

  • +0

    メモリはGAEのインスタンス間で独立しているので、ストレートアップRAMのディレクトリは、それらの間で共有することはないだろうが。起動時にインスタンスごとに初期化する必要があります。新しいスタンバイサーバーとウォームアップ要求があればそれほど悪くないかもしれません。 –

    +0

    まあ、ええ、私が上に概説したものの一部です – Dmitri

    答えて

    0

    GAE 1.5.0のように、常駐しているようです。バックエンドを使用して検索サービスを作成できます。

    もちろん、無料のクォータはありません。

    1

    定期的に再構築しても問題がなく、インデックスが小さい場合は、現在の方法が大丈夫です。インデックスをオンラインで作成し、データストアにシリアル化する代わりに、オフラインで構築してアプリでアップロードしてみましょう。次に、ディスクストアから直接インスタンス化し、更新をプッシュするために、新しいバージョンのアプリケーションをデプロイします。

    +0

    私は約1時間更新するつもりです。そのため、インデックスをアプリにバンドルすることは良い方法のようには見えません。 – Dmitri

    0

    オートコンプリートの場合、おそらく、プレフィックス(基本的にはドロップダウンメニューに何を入れるのでしょうか)の上位N個のマッチをmemcacheに保存できますか? memcacheエンティティは、データストア内のエンティティによってバックアップされ、必要に応じて再ロードされます。

    1

    最近GAEは「テキスト検索」サービスを追加しました。見てみましょうGAE Java Text Search

    +0

    GAE/J FTS APIの結果のページ分割をどのように処理するかについての考え方はありますか?私はnullカーソルを取得し続けます。ありがとう。 –

    関連する問題