Lucene搜索结果排序问题

Lucene搜索结果排序问题(按时间倒序排的替代解决方法)

对于数据量大(索引文件大于50M)的索引,尽量不要用索引中的字段排序,要用索引ID排序(INDEXORDER);两者效率相差近10倍,以下从内存占用与CPU处理时间来比较:

内存占用比较:

图一:使用整型的唯一标识字段排序

图二:使用索引ID(INDEXORDER)排序

拿占用内存最多的对象来比较:我们可以看到,图一比图二多2,900,766bytes(索引文件大小:61M)

处理时间比较:

使用整型的唯一标识字段排序的处理时间是3016ms,使用索引ID(INDEXORDER)排序的时间是303ms

解决方法:

为了能够使索引ID倒序等同于时间倒序:在建立索引时,就要按照数据的时间顺序建立,老的数据先索引,新的数据后索引

倒序代码:

//以下代码基于Incubating-Apache-Lucene.Net-2.0-004-11Mar07

Hitshits=searcher.Search(query,newSort(newSortField(null,SortField.DOC,true)));

参考:http://markmail.org/message/noq4kohwipx5wzfo#query:Sort.INDEXORDER+page:1+mid:4ydkfgdj6kbvhq2x+state:results

相关推荐