首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Lucene/Solr Dev 一:Lucene indexing Time(Date)& Lucene Query Time(Date)

2012-10-14 
Lucene/Solr Dev 1:Lucene indexing Time(Date)& Lucene Query Time(Date)先看一段代码及其运行结果:?此方

Lucene/Solr Dev 1:Lucene indexing Time(Date)& Lucene Query Time(Date)

先看一段代码及其运行结果:

?此方法主要用了RangeQuery 来查询Field对应值大于起始时间,小于结束时间的Document,这种方法在现在已经被弃用;

multiRangeQuery()代码:

?此方法用了BooleanQuery 来完成查询查询Field对应值大于起始时间,小于结束时间的Document,BooleanQuery 有add(Query query, BooleanClause.Occur occur)方法,所以它可以包含多个Query,此处包含两个RangeQuery ,不难看出此种方法的效率的不能够满足Application的需求的,同样此方法中用到的许多方法现在已经弃用;

由上面两种方法的比较可以解释一个关于Lucene Time Range 的结论:“Date searchers should use a single Range term rather than two”.

queryDateService()代码:

?从运行结果数据看此方法效率最高,在Application开发中应用此方法;

?

对Lucene Time?做索引及查询的总结

?前面在Lucene学习笔记(二)中提到Lucene对时间的索引及查询,这里我主要针对查询效率对Lucene indexing Time(Date)& Lucene Query Time(Date)做一总结:

1 两种思路做索引:

Method One:Time(Date)它对应一个Long型数字,所以可以用NumericField做索引;

Method Two: 将Time(Date)转化为格式了的字符串,用普通Field

为了详细研究,我们把Method One:分为两种情况(分别以毫秒和秒做索引)

贴出做索引代码:

分析上述代码:

queryDateService(File indexFile, long startDate, long endDate, String dateField)传入参数为要做查询的索引文件,开始Time(Date)对应long值,结束Time(Date)对应long值,及?Time(Date)对应Field名字;此处传入long值可以是毫秒对应值(new Date().getTime()),也可以是秒对应值(new Date().getTime() / 1000);

queryDateService(File indexFile, String start, String end, String dateField)传入参数为要做查询的索引文件,开始Time(Date)对应格式字符串的值,结束Time(Date)对应格式字符串的值,及?Time(Date)对应Field名字;

?

下面给出测试结果:


Lucene/Solr Dev 一:Lucene indexing Time(Date)& Lucene Query Time(Date)
?

在上图中:X轴表示索引文件的大小,单位为MB,本实验开始索引文件从0MB一直到最后的1456MB,Y轴表示查询时间,单位为毫秒,本实验查询最多耗时1922;

1140

?

上面表格和曲线图是一种一一对应关系,分析上述结果不难看出:将Time(Date)转化为格式了的字符串,用普通Field做索引,查询时用String range查询是最佳选择;

结论:Time(Date)做索引,并对索引结果进行查询的最佳方案为:将Time(Date)转化为格式了的字符串,用普通Field做索引,查询时用String range查询;

?

?

?

?

?

?

?

?

?

?

?

?

热点排行