浏览 13208 次
锁定老帖子 主题:Lucene相关度排序的调整
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-02-12
如欲转载,请注明作者:caocao,来源http://caocao.iteye.com/。 Lucene的搜索结果默认按相关度排序,这个相关度排序是基于内部的Score和DocID,Score又基于关键词的内部评分和做索引时的boost。默认Score高的排前面,如果Score一样,再按索引顺序,先索引的排前面。那么有人问了,如果我要先索引的排后面怎么办呢?隐士研究了源码后发现这是相当简单的事情。以下代码基于Lucene 2.0。 看Sort的默认构造函数,相关度就是SortField.FIELD_SCORE和SortField.FIELD_DOC的组合。 java 代码
那么该如何构造我们需要的SortField呢?请看SortField的一个构造函数,有一个参数reverse可供我们调整结果集的顺序。 java 代码
由此可见,只要构造一个SortField[]就可以实现我们要的功能,请看: java 代码
呵呵,只要将此SortField[]作为参数传入Sort的构造函数得到Sort的一个instance,将此instance传入searcher.search(query, sort)即可得到了期望的结果。 具体实例可参考隐士做的搜索站http://so.mdbchina.com。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-02-15
单个排序时,直接用setSort更方便
/** * Sets the sort to the terms in <code>field</code> possibly in reverse, * then by index order (document number). */ public void setSort(String field, boolean reverse) |
|
返回顶楼 | |
发表时间:2007-03-17
lucene搜索如果不按docid或者score sort的话,那将会是非常慢的。代码不管你怎么优化、索引库不管你如何建都是徒劳的。
我曾经使用过lucene搭建搜索平台,当记录达到50万以上,索引库达到2G以上时,lucene的搜索、优化索引等效率就非常底了(P3 500Mhz CPU、1G Ram),并且不可接受。 |
|
返回顶楼 | |