由于最近做毕设,需要做一个商品查询模块,用到了lucene来做商品索引的查询,原因为:
1.marks(商品标签)字段含有多个标签,当针对某个标签查询时,或许只能用like 查询,这样的查询慢!
2.没用过lucene,想用来测试下性能
可能结果早就显而易见,但是这次测试我要的是数据,不仅仅是结果,所以别说什么你们知道答案类似的话~
言归正传,我的设计是这样的:
而,性能对比,对比的就是搜索条件,是在lucene快,还是直接去mysql快!
我的lucene模块提供了两种索引方式,
一种是创建索引在文件中,需要查询时在索引文件中去查询
二是在内存中创建索引,需要时直接再内存中查询
由于第二种方式明显快于第一种(设计第一种的原因是,索引仅仅在内存是不够的,需要持久化,不能每次都重新拉数据再创建索引),所以仅仅是放上测试数据,仅作对比!
说明:
1.MYSQL只有主键索引,marks字段建有索引,但是通过
explain select * from t_baobei t where t.baoBeiMarks like '%手' ;
explain select * from t_baobei t where t.baoBeiMarks like '%手%' ;
explain select * from t_baobei t where t.baoBeiMarks like '手%' ;
三种情况确认,该SQL语句没有用到索引
2.lucene分词器用的是
StandardAnalyzer()
测试1: (1W条数据)
创建索引在文件中:
index's num is 10000
create use : 1953 ms
search use : 547 ms
创建索引在内存中:
index's num is 10000
create use : 1046 ms
search use : 94 ms
MYSQL中:
SQL 语句为 SELECT * from t_baobei t WHERE t.baoBeiMarks like '%手机%'
测试2: (3W条数据)
创建索引在文件中:
第一次
index's num is 30000
create use : 2641 ms
search use : 609ms
第二次
index's num is 30000
create use : 3063 ms
search use : 563ms
第三次
index's num is 30000
create use : 3704 ms
search use : 547ms
第四次:删除已有索引,索引大小3M
index's num is 30000
create use : 2500 ms
search use : 531ms
可以看出:
1.创建索引的耗时随记录数的增加而增加,3W条数据的平均耗时为3S以上,数据量是原来的3倍,耗时自是1.5倍
2.从1W到3W,搜索耗时增加不大
创建索引在内存中:
index's num is 30000
create use : 1687 ms
search use : ~94 ms(搜索'手');
search use : ~110 ms(搜索'手机');
可以看出:
1.和1W数据在内存中创建和搜索比,数据量是原来的3倍,创建耗时是原来1.5倍,搜索耗时比本没有差别
2.和在文件中创建和搜索索引比,同样的数据量(3W),创建耗时减少一半,搜索耗时,减少一个数量级!!
3.和MYSQL 相比四种like方式来说,基本没有竞争优势,除最耗时的第一条SQL外,其余mysql均只有lucene的20%
MYSQL中:
* (30000条数据)
[SQL] SELECT * from t_baobei t WHERE t.baoBeiMarks like '%手%'
时间: 140ms
[SQL] SELECT * from t_baobei t WHERE t.baoBeiMarks like '手%'
时间: 30ms
[SQL] SELECT * from t_baobei t WHERE t.baoBeiMarks like '%手机%'
时间: 16ms --40ms
[SQL] SELECT * from t_baobei t WHERE t.baoBeiMarks like '手机%'
时间: 16ms --40ms
PS: 发现一个有趣的现象,不同的like方式的写法,搜索时间差距这么大.字符越少,%越多,粒度就越细.耗时越严重
- 大小: 23.6 KB
分享到:
相关推荐
Lucene3.5全部源码,打包jar文件,可以直接打开查看源码,Lucene开发必备
luke3.5 可查看lucene3.5索引
lucene3.5 IKAnalyzer3.2.5 实例中文分词通过,目前在网上找的lucene 和IKAnalyzer 的最新版本测试通过。内含:示例代码,以及最新jar包。 lucene lucene3.5 IKAnalyzer IKAnalyzer3.2.5 jar 中文 分词
lucene3.5的创建和增删改查的工程
lucene 官网的3.5源代码,标准代码,未做任何处理
lucene3.5高亮
基于新发布的Lucene3.5 做的一个实例,仅供参考。
几个经常用到的包,有中文分词器,核心包,高亮包...等等
chm格式的Lucene帮助文档,Lucene3.5
用爬虫爬下来的Lucene3.5 api 可以正常使用
lucene3.5全文检索案例lucene+demo
lucene3.5的API,虽然是英文版,不过还是很有用的
Lucene 3.5&API,最新版
这个为一个lucene3.5所写的程序例子,有助于刚入门的学习lucene的人,更快的的进入到lucene的学习中去。
介绍lucene3.5的相关技术,包括基本用法、分析器、索引建立与查询,扩展的高亮、分页、以及solr3.5的相关用法
lucene3.5中文分词,详细的注释,适用于初学者。有兴趣的可以看看。
基于新发布的Lucene3.5的学习,对部分模块的研究及学习心得。
Lucene3.5视频教程(内含分享链接) 一共50集, 包含各部分讲解及源码
solr_lucene3.5_lukeall-3.5.0.jar.zip