我正在尝试使用Lucene.Net构建自定义搜索引擎。
所有似乎都很顺利,但我在循环搜索功能返回的Hits对象时遇到了问题。每当我搜索一个项目时,搜索功能需要大约0.07秒,并且在20到90秒之间循环到返回的对象。
ex :(总共返回11384个结果)
搜索花了0.068秒
对象循环耗时25.50秒。
现在我第二次循环这个相同的对象需要花费更少的时间(对于相同的上述情况,它需要0.141秒。
这是搜索功能:
public List<SearchResultId> SearchId(string searchTerm)
{
IndexSearcher indexSearcher = new IndexSearcher(_indexDir);
List<SearchResultId> searchList = new List<SearchResultId>();
try
{
QueryParser queryParser = new QueryParser(_fieldName, new StandardAnalyzer());
Query query = queryParser.Parse(searchTerm);
Hits hits = indexSearcher.Search(query);
int numHits = hits.Length();
SearchResultId search;
for (int i = 0; i < numHits; ++i)
{
search = new SearchResultId();
search.score = hits.Score(i);
search.id = hits.Doc(i).Get(LuceneIndexer.DOC_ID_FIELD_NAME);
searchList.Add(search);
}
}
catch
{
indexSearcher.Close();
}
indexSearcher.Close();
return searchList;
}
这是正常的吗?有没有办法优化这个过程?
由于
答案 0 :(得分:1)
这是正常的,因为第二个查询因缓存而总是更快。 here提供了很多有用的提示,可以帮助您进行优化。
对我帮助最大的是: