1

負荷分散を使用して 2 つの異なるサーバーで Web アプリケーションを実行しており、Zend_Search_Lucene を使用してドキュメントのインデックスを作成しています。

現在、ユーザーがサーバー#1を介してサイトにアクセスし、情報を保存するインデックス作成の問題に直面しています.Zend_Search_Luceneはインデックスのみサーバー#1を保存します。

したがって、別のユーザーがサーバー #2 と検索を介してサイトにアクセスすると、サーバー #2 のインデックスのみが取得されます。

両方のサーバーからアクセスされるインデックス格納フォルダーを共有する方法はありますか? または、ファイル システムではなく、mysql データベースにインデックスを保存する方法はありますか?

4

1 に答える 1

2

私はあなたの質問に正確な答えを与えることはしませんが、あなたに代わりを与えるので、私を傷つけないでください。

そのためにzendを使用しないでください。非常に遅いです。私を信じてください。これは、すべての検索要求に対して完全にロードする必要がある、単なる悪い実装です。いくつかのベンチマークを実行するだけで、気付くでしょう。

luceneは確かにシャーディングをサポートしています(複数のサーバーにインデックスを配布し、別々にフェッチされた結果を結合します)

レプリケーションもサポートしているので、より良い方法です。

だからここに実際に役立つ部分があります:

http://lucene.apache.org/solr/でsolrをチェックしてください 。そのすべてのセットアップは、含まれているjettyを使用したインストール例を示しています。ワイルドカードフィールドを使用せずにフィールドをカスタマイズして開始する場合は、フィールドをカスタマイズする以外に何もする必要はありません。java -jar start.jar

サーバーが私が忘れたデフォルトのポートで実行されると、httppostを使用して新しいドキュメントを送信できるインターフェイスができます。これは、各アプリケーションサーバーのphpから実行できます。次に、コミットフラグを含めた場合、solrはインデックスを作成し、変更をコミットします。

httpインターフェースとsolr照会パラメーターを使用して索引を照会できます。次に、きちんとしたjsonまたはxmlformattetドキュメントを取得します。負荷の問題が発生した場合は、サーバーを複製できます。

ただし、すべてが稼働中であり、luceneがロードされ、クエリをすぐに処理できるため、サーバーはzendを使用して行う場合の1000倍のリクエストを管理します。

このステップバイステップのチュートリアルを確認するだけで、問題ないはずです:http: //lucene.apache.org/solr/tutorial.html

あなたがそれをすべて好きではなく、とにかくzendに固執したい場合:

データベースは本質的に不可能ですが、ラッパーを作成することはできます。しかし、これはばかげているでしょう。この場合の最善の方法は、ネットワークファイルシステムを設定することです。

どんな質問でも、lemmeは知っています。

ps:選択肢に出くわしたときは、dismaxを使用することをお勧めします。ほとんどの場合、はるかに高速です。

于 2010-08-23T16:49:20.203 に答える