知识点的梳理:
-
lucene 为查询出来的结果(document)都打一个分,得分越高,排列的顺序越靠前,我们可以自己去干预..
-
相关度排序
-
相关度排序得分
- 相关度得分是在查询时根据查询条件实进计算出来的;
- 如果索引库数据不变,查询条件不变,查出的文档得分也不变;
-
注意事项
- 排序我们可以通过设置这个权重值来影响他的得分;
- 得分跟命中的次数有关系;
- 这个得分跟文档出现的搜索关键字的次数或者位置有关系...
-
Boost和Sort
-
通过改变文档Boost值来改变排序结果:
- Boost是指索引建立过程中,给整篇文档或者文档的某一特定属性设定的权值因子,在检索时,优先返回分数高的。通过Document对象的setBoost()方法和Field对象的setBoost()方法,可以分别为Document和Field指定Boost参数。不同在于前者对文档中每一个域都修改了参数,而后者只针对指定域进行修改。默认值为1F,一般不做修改。
-
使用Sort对象定制排序:
- Sort支持的排序功能以文档当中的域为单位,通过这种方法,可以实现一个或者多个不同域的多形式的值排序。
-
-
-
Boost示例
- 测试代码
public class TestSort { public static void main(String[] args) throws IOException, ParseException { IndexSearcher indexSearcher = LuceneUtils.getIndexSearcher(); String keywords = "梦想";//查询"梦想" String[] fields = { "content"}; QueryParser quertParser = new MultiFieldQueryParser(LuceneUtils.getVersion(),fields,LuceneUtils.getAnalyzer()); //条件 Query query = quertParser.parse(keywords); TopDocs topDosc = indexSearcher.search(query, 50); ScoreDoc[] scoreDocs = topDosc.scoreDocs; for (ScoreDoc scoreDoc : scoreDocs |