lucene搜索时按照日期排序的一种解决方案,lucene日期排序,使用lucene建立索引
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
用户点评