欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

lucene搜索时按照日期排序的一种解决方案,lucene日期排序,使用lucene建立索引

来源: javaer 分享于  点击 35822 次 点评:184

lucene搜索时按照日期排序的一种解决方案,lucene日期排序,使用lucene建立索引


使用lucene建立索引时如果有日期信息,并且搜索时要按照日期进行排序,如果索引中这个日期中是规格化的Date或者TimeStamp(当然已经转化成String类型建立索引),容易想到的方法是利用org.apache.lucene.document包下的DateTools类的DateToString方法奖日期Date存进索引,然后搜索时候利用这个方法的“反方法”stringToDate方法将索引中以String类型存储的Date信息取出,然后按照这个Date作为搜索时候的排序条件,然而这之后就会出现问题,因为,我们要构建一个此日期信息的SortField做为排序条件,但是SortField的构造方法中第一个参数都是Stringfield,也就是索引中存放日期信息的Field,这样矛盾就出现了:既然你指定了这个Field,那也就等不到你将此Field中的日期信息经过stringToDate转换而在搜索时已经得到搜索结果。

lucene的docs中是这样描述DateTools类的:Provides support for converting dates to stringsand vice-versa. The strings are structured so that lexicographic sortingorders them by date, which makes them suitable for use as field values andsearch terms.也就是说这个类就是为方便搜索时按照日期信息排序而设定的,用于Date与String类型的相互转化,而上面提到的问题又确实存在。

我先绕过了这个问题,对于TimeStamp的日期信息,我将此信息直接利用toString方法之后存进索引,然后在索引中又另建了一个Field,命名为sortdate,索引中存进Document时,我就用System.currentTimeMillis()方法获取一次时间信息,这个时间信息是long类型的,转换成String类型存进索引,构建SortField进行搜索时,指定此SortField为

SortFieldsf=newSortField("sorttime",FieldCache.DEFAULT_LONG_PARSER,true);

按照这个SortField对搜索结果进行排序,同样达到了效果。

但是不知道上面的提到的问题应该怎么解决?

SortFieldsf=newSortField("sorttime",FieldCache.DEFAULT_LONG_PARSER,true);//该片段来自于http://byrx.net
相关栏目:

用户点评