Lucene.Net2.0搜索结果排序问题

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

内存占用比较:
图一:使用整型的唯一标识字段排序
LuceneSortMemeryTestField

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

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

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

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

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

Hits hits = searcher.Search(query, new Sort(new SortField(null, SortField.DOC, true)));

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

In Cnblog.com:
http://www.cnblogs.com/zhubo/archive/2008/02/25/Lucene_Net_Sort.html

posted @ 2009-07-27 09:30  周骏  阅读(518)  评论(0编辑  收藏  举报