NIOFSDirectoryを使用して約1,000万のオブジェクトが索引付けされています。Luceneパフォーマンス:Searcherからすべてのドキュメントを取得
MatchAllDocsQueryでドキュメントを取得すると、パフォーマンスは他のタイプのクエリ(BooleanQueryなど)よりも大幅に悪化します。私はいくつかのテストを実行し、パフォーマンスは約100倍悪化します。
とにかく上位n個のドキュメントだけに興味があるので、MatchAllDocsQueryを使用せずにSearcherオブジェクトから検索する方法はありますか?
オブジェクトのランダムプロパティでWildcardQueryを使用することも検討していますが、Lucene in Actionは、WildcardQueryに関連付けられた「パフォーマンスの低下」があると主張しています。
大変ありがとうございます。
トップnドキュメントは何に応じていますか?無作為なサンプルだけが必要な場合は、別のテイク(データベース、多分)を使用するか、各ドキュメントに数値識別子を追加して、ルーゼン以外でランダムな選択をしてからタームクエリを使用します。他の制約がありますか?これは何とか間違っているようです。 –
コードを投稿できますか? searcher.search()メソッドは100倍の時間がかかりますか?私は重要なパフォーマンス上の問題なしにMatchAllDocsQueryを使用します。 – bajafresh4life
コメントありがとうございました。 ここにシナリオがあります。私はクラスFooの1000万のオブジェクトを持っており、その95%はフィールドBar(Bar = 1)に同じ値を持っています。 10MMオブジェクトで "Bar:1"を検索すると、発生頻度が非常に遅くなります。その結果、Barの値に基づいてインデックスを分割し、インデックスからBarフィールドを削除しました。 "Bar:2"が必要な場合は、オブジェクトのすべて(または任意のもの)を正しいパーティションに入れるだけです。これは本質的にMatchAllDocsQueryのために設計されていますが、パフォーマンスは受け入れられません。 – Cambium