3

私は現在、Web アプリケーションで Lucene.net を実行していますが、パフォーマンスに関して最善の方法を考えています。

現在、インデックスの最適化とともに、すべてのインデックス書き込みがスケジュールされたプロセスでまとめて処理されるように設定しています。

ただし、検索については、現在、検索ごとにサーチャーを開いたり閉じたりしていますが、これは理想的ではないことがわかっています。

この状況では、どのようなアプローチが最善だと思いますか?

更新/最適化が処理されたら、インデックス サーチャーを閉じて再度開く必要があるため、スケジュールされたプロセス (Windows コンソール アプリ) は、完了したことを Web アプリケーションに通知する必要があります。

4

2 に答える 2

5

Lucene.NETをBugTracker.NETに統合しました。私がやったことが最高かどうかはわかりませんが、うまく機能しているようです。

アプリの起動時にインデックスを作成します。

検索ごとにインデックスが再ロードされないように、サーチャーを作成して保持します。すべてのスレッドは同じサーチャーを共有します。検索者が検索すると、ロックが取得されます。

一方、データが変更されたときにインデックスを更新するIndexWriterがあります。少し変更しているだけなので、タスクをすばやく実行できます。実行すると、同じロックを取得し、サーチャーを破棄し、インデックスを更新して、サーチャーを再作成します。新しいサーチャーは、インデックスが次に更新されるまでそのままです。検索者は常に最新のインデックスを使用しています。

BugTracker.NETソースを取得して、ファイルmy_lucene.csとsearch_text.aspxを確認できます。それはすべてこれらの2つのファイルにあり、それほど多くのコードはありません。

于 2008-10-30T16:21:42.680 に答える
0

You could call to the readers IsCurrent() method to check if there is a new version of the index available, and if it's then reopen it. Couldn't be the best way, but is easy enough and if your requirements are not very big it will be sufficient.

于 2008-10-31T13:36:32.793 に答える