3

Lucene 2.9.2を使用しており(3.x へのアップグレードが計画されています)、時間の経過とともに検索クエリが遅くなることは既知の事実です。通常、完全な再インデックスを実行します。https://stackoverflow.com/a/668453/356815の質問とその回答を読み、今すぐ回答します。実行時にパフォーマンスが許容されなくなったため、optimize() は使用しません。

断片化?

次のことを疑問に思います:既存のインデックスの断片化を測定するためのベスト プラクティスは何ですか? ルークはそれで私を助けることができますか?

この分析トピックについてのご意見をお聞かせいただければ幸いです。

私たちのインデックスに関するもう少しの情報:

  • 400,000 のドキュメントをインデックス化しました
  • ドキュメントごとにプロパティを多用します
  • リクエストごとに新しいサーチャー オブジェクトを作成します (変更を検索結果にすぐに表示するため)。
  • クエリのパフォーマンスは 30 ミリ秒 (同じ検索の繰り返し) から 10 秒 (複雑) の間です。
  • インデックスは 44 個のファイル (15 個の .del ファイル、24 個の cfs ファイル) で構成され、サイズは 1GB です。
4

1 に答える 1

3

古いバージョンの Lucene は、多数のセグメントを効率的に処理できませんでした。これが、検索パフォーマンスを向上させるために最適化 (すべてのセグメントをまとめて結合) することを推奨する人がいる理由です。

これは、最近のバージョンの Lucene では当てはまりません。実際、optimize の名前は魔法のように聞こえないように変更されており (forceMerge(1) を呼び出す必要があります)、常にセグメントをマージすることは有害であるとさえ見なされています ( Lucene 開発者 Simon Willnauer によるこの素晴らしい記事を参照してください)。

リクエストごとに、新しいサーチャー オブジェクトを作成します

リーダーを開くには非常にコストがかかります。むしろ、必要な場合にのみインデックスを再オープン (増分オープン) するのに役立つSearcherManagerを使用する必要があります。

于 2012-08-29T12:41:49.543 に答える