Lucene 如何实现高性能 GroupBy <二>
2010-11-30 17:12
441 查看
紧接上一篇 Lucene 如何实现高性能GroupBy <一> 的讲:Lucene--Util--PriorityQueue.cs
先给大家看一段代码,来源于PriorityQueue类
DownHeap
这里用到了移位运算,用以快速的将heap中的分数进行排列,每一次的排列都会将分数最小的值放在heap[1]位置,用以返回,在Collect方法如果发现Doc对应的Score比heap中最小的分数还小时,就不再进行高低分排序。
我们前面说到,同一公司分数低的被同一公司分数高的替换掉再进行高低分排序时我们要注意了,移位起始值就不再是1了,而是被替换值在heap中的位置,所以我们还需要重载一下DownHeap方法,这些都很简单了,都是一些具体的实现方式了,原本想把实际的代码公布出来,但是考虑到里面有很多是根据具体需求来写的,懒得改代码了,这里也就不再公开具体代码,即然明白了原理,而且公布了一些比较关键地方的代码,我想实现起来应该没有什么大问题了,如果有其它疑问,可以以评论的方式来出现,欢迎大家来拍砖。
先给大家看一段代码,来源于PriorityQueue类
DownHeap
private void DownHeap() { int i = 1; System.Object node = heap[i]; // save top node int j = i << 1; // find smaller child int k = j + 1; if (k <= size && LessThan(heap[k], heap[j])) { j = k; } while (j <= size && LessThan(heap[j], node)) { heap[i] = heap[j]; // shift up child i = j; j = i << 1; k = j + 1; if (k <= size && LessThan(heap[k], heap[j])) { j = k; } } heap[i] = node; // install saved node }
这里用到了移位运算,用以快速的将heap中的分数进行排列,每一次的排列都会将分数最小的值放在heap[1]位置,用以返回,在Collect方法如果发现Doc对应的Score比heap中最小的分数还小时,就不再进行高低分排序。
我们前面说到,同一公司分数低的被同一公司分数高的替换掉再进行高低分排序时我们要注意了,移位起始值就不再是1了,而是被替换值在heap中的位置,所以我们还需要重载一下DownHeap方法,这些都很简单了,都是一些具体的实现方式了,原本想把实际的代码公布出来,但是考虑到里面有很多是根据具体需求来写的,懒得改代码了,这里也就不再公开具体代码,即然明白了原理,而且公布了一些比较关键地方的代码,我想实现起来应该没有什么大问题了,如果有其它疑问,可以以评论的方式来出现,欢迎大家来拍砖。
相关文章推荐
- Lucene 如何实现高性能 GroupBy <一>
- Lucene 如何实现高性能 GroupBy <一>
- Lucene 如何实现高性能 GroupBy <二>
- Box2d源码学习<二>内存管理之SOA的实现
- Java中i18nAction实现国际化<二>
- 在.Net的WinForm开发中如何实现控件随窗体大小的改变而自动适应其改变<收藏>
- 如何实现ArrayList<E>泛型的复制
- JSPatch实现原理详解<二>
- 如何实现4个<div>在同一行上
- <如何实现1080P延迟低于500ms的实时超清直播传输技术> <关于直播,所有的技术细节都在这里了>
- Struts2标签如何实现For循环 像JSTL's <c:forEach begin="..." end="..." ...> 中的用法
- 【转】如何实现<textarea> placeholder自动换行?
- 利用 CSS3 实现一个转动立体六边形 <二>
- 伸展树C++类实现<二>自顶向下设计
- ThreadPoolExecutor核心实现原理和源码解析<二>
- C# List泛型集合中的GroupBy<>用法
- 如何实现具有层次结构的 TreeView <四> (WPF/TreeView/Style/Template)
- 如何实现<div>中元素上下对齐
- 百度地图开发之实现运动轨迹 <二>
- 一个ArrayList<Integer>的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢