Lucene.net 2.9.1版与2.3版的搜索比较

Lucene.net 2.9.1版与2.3版的搜索比较。

比如:你搜索一个关键词,需要检索并输出一百万条记录,按2.3的版本,它是用

Hits hits = searcher.Search(query);

这种模式下,它会把所有命中的结果都放到hits中存下来,如果有一千万,它就会提出来一千万,而你只取一百万的时候,需手动从hits变量中提取。一千万条数据一次提出来,那将是非常耗内存,再加上并发,系统一下就吃不消了,如果数据量小,倒可以承受。

而2.9.1版本之后,它采用的方式变了,search出来的结果中,只包括命中的Doc ID和Score,代码如下

TopDocs topDocs = searcher.Search(query, null, getTotals);

拿到topDocs之后,你只要按它里面的ID再去索引库中提取内容即可,

ScoreDoc[] scoreDoc = topDocs.scoreDocs;
List<string> cus = new List<string>();

for (int i = 0; i < topDocs.totalHits; i++)
{
int id = scoreDoc[i].doc;
Document doc = searcher.Doc(id);
cus.Add(doc.Get(”email”));
}

这样的好处是,不会把多余的数据提出来,按需提取,是一个很大的改进。

你可能感兴趣的:(Lucene)