検索と挿入に関してLucene.Net 3.0.3でいくつかのテストを実行しました。Lucene検索のパフォーマンス - DOCとDEFAULTのソート
テストのために、実際の英語の単語に基づいてキーワードアナライザーとテキストジェネレーターを使用しました。
インデックスが1000万のランダムな文を検索している間に約800万のドキュメントにヒットした場合、検索が完了するまでに25分かかります。 (デフォルトのソート)
私たちは、ソートを文書化するために検索を変更した場合:
searcher.Search(query, null, int.MaxValue, new Sort(new SortField(null, SortField.DOC, true))); // boolean query
検索のみを完了するまでに数秒かかります。
何がありますか? デフォルトのソートは関連性に基づいていますか?なぜそれはそのような巨大な影響を持っていますか?
また、int.MaxValueからのヒット数を50とすると、検索が数秒に短縮されます。
インデックスで見つかった最初の50ヒットのみを取って残りを無視していますか?
この特定のケースでは、1つのフィールドにキーワードアナライザ、別のフィールドに標準アナライザを使用して全文を索引付けしています。入ってくる検索が100%正確でなければならない場合、私はキーワードアナライザによってインデックスされた特定のフィールドを検索します。あなたはこのケースにどのようにアプローチしますか? –
@pelican_george - 100%正確とはどういう意味ですか?クエリがフィールドの*テキスト全体*と一致する必要がある場合は、キーワード分析が適切です。クエリがフィールドの一部と正確に一致しなければならない場合(つまり、現在のクエリでワイルドカードを使用する必要がある場合)、PhraseQueryが最初に考えられます。分析のための他のアプローチも有用である。 – femtoRgon
私はクエリがフィールドのテキスト全体と一致しなければならないことを意味しました。入力いただきありがとうございます。 –