我有一个包含 150 万个文档的 RAMDirectory,我正在使用 PrefixQuery 搜索单个字段。当搜索文本长度为 3 个或更多字符时,搜索速度极快,不到 20 毫秒。但是当搜索文本的长度少于 3 个字符时,搜索可能需要整整 1 秒。
由于它是一项自动完成功能,并且用户以一个字符开头(并且结果确实是 1 个字符长度),因此我无法限制搜索文本的长度。
代码差不多:
var symbolCodeTopDocs = searcher.Search(new PrefixQuery(new Term("SymbolCode", searchText), 10);
SymbolCode 是一个 NOT_ANALYZED 字段。Lucene.NET 版本是 3.0.3。
该示例已简化,我可能必须使用 BooleanQuery 在现实世界场景中应用额外的约束。
如何在这种特定情况下提高性能?这些单字符或双字符查询导致服务器停机。