5

通常、ユーザーは検索を行ってヒットリストを取得し、それを参照できます。ヒットリストは、ブラウジング全体で一貫性を保つ中間結果であり、通常はセッション状態に保存されます。たとえば、新しいアイテムが他のアイテムによって同時に追加された場合、それらは後続の検索でのみ表示されます。

REST アプリケーションでは、この中間結果を簡単に取得することはできません。クライアントにもモデルにも属しません。Pagination in a REST web appを読みましたが、答えが完全にはわかりません。そこの解決策は、ユーザーが結果を閲覧している間、モデルが更新されないことを前提としているようです。

もちろん、世界 (モデル) を一連の不変のスナップショットとして想像することもできます。タイムスタンプ (またはグローバル バージョン番号) を提供することで、その時点でのモデルの一貫したビューを取得し、概念的な観点から問題を解決します。ただし、モデルの完全なバージョン管理を意味します。(関数型プログラミングで描くことにもつながりがあるのか​​も気になります)

この問題にどのように対処すればよいですか?

注: HTTP の状態やセッションの概念をまったく持たないplay フレームワークを使用する予定があるため、質問しています。それは純粋な安らぎです。

4

2 に答える 2

5

最初の検索でクエリ結果を取得したら、結果をキャッシュに保存できます。1 つのサーバーの場合、クラスター環境の場合は ehcache (play でサポートされている) または memcached (play でサポートされている) になります。静的な名前 + セッション ID で結果を保存できます。したがって、リクエストごとに必要なのはセッション ID だけです。それはクライアントの Cookie に保存され、プレイ アプリで利用できます。キャッシュされたデータをページの閲覧に使用できます。また、ElasticSearch もお勧めします。

編集:より良い方法は、play-search http://github.com/jfp/play-searchを使用できることです。サンプル:

    Query q = Search.search("object:dogs", Folder.class);
q.orderBy("object")
    .page(2,5)
    .reverse();

PS: Play に関するあなたの決定は完璧です。私はプロの .net 開発者であり、asp.net mvc 2 と競合できる世界で唯一の (最適な) Web フレームワークは Play フレームワークであると言えます。Grails にはバグがあり、Django/Python、Yii/Php、Rails はすべて遅く、タイプ セーフではなく、jvm/clr フレームワークからはかけ離れています。wicket、tapestry、struts、jsf、spring mvc はすべて冗長で役に立ちません。spring roo は単なるテンプレート ジェネレーターです。Asp.net mvc は asp.net を上回り、.net のナンバー 1 開発プラットフォームになりましたが、sun は次世代の jsf を使用した古い asp.net クローンに取り組んでいました。これは大きな間違いです。私の意見では、Java の唯一の希望は play フレームワークです。scalaモジュールを使えば、完璧です...

于 2010-07-06T20:23:08.713 に答える
0

私はあなたのコンテキストが何であるかについて少し迷っていますが、簡単に答えなければならない場合、それは検索結果がモデルの一部であるべきだということです. 検索可能なモデルがあるとします。あなたがすることは、インデックス情報を検索して保存するために必要な部分にインデックスを付けることです(それもモデルの一部にします)。検索を実行するときは、インデックスをクエリして結果を表示します。2 回目の検索を実行しても、インデックスが再生成されない限り、新しく追加されたアイテムは含まれません。

これにより、セッション状態を使用する必要がなくなり、セッション状態が安定した状態に保たれます。これは、インデックス作成がリソースに対して実行される単なる別の操作であるためです。これはあなたが必要とするものですか?

于 2010-07-05T10:51:30.757 に答える