使用 Lucene 的 Hitcollector 是否可以减少搜索时间?如果可以,在以下情况下如何正确实施?
// search login here ie.
// this is the search method
// random query
if (!string.IsNullOrEmpty(vendor))
{
bQuery.Add(qbVendor.Parse(vendor.ToLower()), BooleanClause.Occur.MUST);
}
bQuery.Add(qbWebsite.Parse(website.ToLower()), BooleanClause.Occur.MUST);
TopDocs hits = this.ProductIndexSearcher.Search(bQuery, null, 1000)
return hits.scoreDocs;
这部分将是函数调用:
ScoreDoc[] docs = null;
docs = s.KeywordSearch(keyword, category, Webshop.Context.InSiteWebshopId, null, null).ToList(), 1000
foreach (ScoreDoc d in docs.Take(maxResult))
{
Document doc = this.ProductIndexSearcher.Doc(d.doc);
}
据我了解,不建议使用 Searcher.Doc 从搜索结果中获取文档,而是使用 hitcollector。我试图让一个hitcollector加入,但结果很混乱。任何帮助将非常感激!
编辑:澄清我担心的是:
为了获得良好的搜索性能,此方法的实现不应在遇到的每个文档编号上调用 Searcher.doc(int) 或 org.apache.lucene.index.IndexReader.document(int)。这样做会使搜索速度减慢一个数量级或更多。
所以我只是想知道添加一个 hitcollector 是否会给我们带来一些额外的性能。如果在第一个答案中指定调用 Searcher.Search(params) 时不需要使用 HitCollector,我可以。你能确认一下吗?