Lucene.net 高数据检索量时怎样显著提高查找效率(从无到有学习Lucene)
一、概述及坏境搭配
日常开发中,相信大家经常会用like去匹配一些数据,同时我们也知道,like往往会导致全表扫描,当数据量越来越大的时候,我们会纠结于数据库的龟速查找,此时我们必须另寻蹊跷,这时lucene就可以大显身手了。
Lunene具体是什么在这里我就不概述了,有兴趣的同学可以google;而在我们项目中,我们可以根据Lucene用在数据查询,或者在web应用里完成爬虫检索等工作,在这里我主要提供一个抛砖引玉的作用,希望大家可以灵活应用Lucene。
首先,我们需要下载Lunene组件。这里我下载的是Lunene.net。我已上传,需要的同学可以去我的上传空间里下载。
地址:http://download.csdn.net/detail/jintougao/6398027
当我们下载好组件后,解压,然后放进项目的根目录里,之后在启动项目里引用相关的dll;OK,现在前提工作完美完成,接下来我们进入具体的项目中。
二、正常like查询首先我们看一下当数据库里存在10w条数据时,通过like查询所用匹配“流行”所用的时间,差不多79秒;

现在写一个通过Lucene搜索的demo。
448ms,虽然这个时间是不包含"创建索引“的时间,但是从时间复杂度上来说,这种预加载索引已算是常量……毫无疑问,完败78707ms;
四、lucene的相关知识点1.我们可以给 Document 和 Field 增加权重(Boost),使其在搜索结果排名更加靠前。
缺省情况下,搜索结果以 Document.Score 作为排序依据,该数值越大排名越靠前。Boost 缺省值为 1。
Score = Score * Boost
通过上面的公式,我们就可以设置不同的权重来影响排名。
如银行或者其它某些有关会员优先的行业中根据 VIP 级别设定不同的权重;
BooleanQuery query = new BooleanQuery(); query.Add(query1, true, false); query.Add(query2, true, false); //...Console.WriteLine("Syntax: {0}", query.ToString());
输出:
Syntax: +(name:name* value:name*) +number:[0000000000000000b TO 0000000000000000d]
参考文档:www.cnblogs.com/JoinZhang/archive/2010/08/25/1808131.html