150万のドキュメントを含むRAMDirectoryがあり、PrefixQueryを使用して単一のフィールドを検索しています。検索テキストの長さが3文字以上の場合、検索は非常に高速で、20ミリ秒未満です。ただし、検索テキストの長さが3文字未満の場合、検索に1秒かかる場合もあります。
これはオートコンプリート機能であり、ユーザーは1文字で開始するため(実際には1文字の長さの結果があります)、検索テキストの長さを制限することはできません。
コードはほとんど次のとおりです。
var symbolCodeTopDocs = searcher.Search(new PrefixQuery(new Term("SymbolCode", searchText), 10);
SymbolCodeはNOT_ANALYZEDフィールドです。Lucene.NETのバージョンは3.0.3です。
例は単純化されており、実際のシナリオで追加の制約を適用するにはBooleanQueryを使用する必要があるかもしれません。
この特定のケースでパフォーマンスを向上させるにはどうすればよいですか?これらの1文字または2文字のクエリにより、サーバーがダウンします。