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 を使用することはお勧めできません。ヒットコレクターを入れようとしましたが、混乱してしまいました。どんな助けでも大歓迎です!
編集:私が心配していることを明確にするために:
検索パフォーマンスを向上させるために、このメソッドの実装では、検出されたすべてのドキュメント番号で Searcher.doc(int) または org.apache.lucene.index.IndexReader.document(int) を呼び出さないでください。これを行うと、検索が 1 桁以上遅くなる可能性があります。
そのため、hitcollector を追加するとパフォーマンスが向上するかどうか疑問に思っていました。最初の回答で指定されているように Searcher.Search(params) を呼び出すときに HitCollector を使用する必要がない場合は、問題ありません。これを確認してもらえますか?