Lucene的搜索结果默认按相关度排序,这个相关度排序是基于内部的Score和DocID,Score又基于关键词的内部评分和做索引时的boost。默认Score高的排前面,如果Score一样,再按索引顺序,先索引的排前面。那么有人问了,如果我要先索引的排后面怎么办呢?隐士研究了源码后发现这是相当简单的事情。以下代码基于Lucene 2.0。
看Sort的默认构造函数,相关度就是SortField.FIELD_SCORE和SortField.FIELD_DOC的组合。
java 代码
/**
* Sorts by computed relevance. This is the same sort criteria as calling
* {@link Searcher#search(Query) Searcher#search()}without a sort criteria,
* only with slightly more overhead.
*/
public Sort() {
this(new SortField[] { SortField.FIELD_SCORE, SortField.FIELD_DOC });
}
那么该如何构造我们需要的SortField呢?请看SortField的一个构造函数,有一个参数reverse可供我们调整结果集的顺序。
java 代码
/** Creates a sort, possibly in reverse, by terms in the given field with the
* type of term values explicitly given.
* @param field Name of field to sort by. Can be <code>null</code> if
* <code>type</code> is SCORE or DOC.
* @param type Type of values in the terms.
* @param reverse True if natural order should be reversed.
*/
public SortField (String field, int type, boolean reverse) {
this.field = (field != null) ? field.intern() : field;
this.type = type;
this.reverse = reverse;
}
由此可见,只要构造一个SortField[]就可以实现我们要的功能,请看:
java 代码
// 评分降序,评分一样时后索引的排前面
new SortField[] { SortField.FIELD_SCORE, new SortField(null, SortField.DOC, true) }
// 评分升序,评分一样时后索引的排前面,呵呵,此为最不相关的排前面,挺有趣的
new SortField[] { new SortField(null, SortField.SCORE, true), new SortField(null, SortField.DOC, true) }
呵呵,只要将此SortField[]作为参数传入Sort的构造函数得到Sort的一个instance,将此instance传入searcher.search(query, sort)即可得到了期望的结果。
分享到:
相关推荐
“Lucene5学习之排序-Sort”这个标题表明了我们要探讨的是关于Apache Lucene 5版本中的排序功能。Lucene是一个高性能、全文检索库,它提供了强大的文本搜索能力。在这个主题中,我们将深入理解如何在Lucene 5中对...
2. **评分与排序**:Lucene使用TF-IDF(Term Frequency-Inverse Document Frequency)算法计算每个搜索项在文档中的重要性。TF表示词频,IDF则反映词的稀有程度。高TF和高IDF的词对文档的相关性更强。 3. **布尔...
在“Lucene.NET 搜索实例 源码 VS2008”这个项目中,我们主要探讨如何使用 Lucene.NET 在 Visual Studio 2008 开发环境中构建一个完整的搜索应用。下面将详细介绍几个关键的知识点: 1. **索引创建**:Lucene.NET ...
这个"Lucene3.3.0学习Demo"是针对这一版本进行的实践教学资源,旨在帮助开发者更好地理解和使用Lucene。 首先,我们来看看Lucene的基本工作流程: 1. **分词**:Lucene通过Analyzer处理输入的文本,将其分解为一...
可以使用 Sort 对象来指定排序字段和排序方式。 例如,下面的代码演示如何使用 Lucene 对搜索结果进行排序: ```csharp Sort sort = new Sort(new SortField("name", SortField.STRING)); TopDocs topDocs = ...
**Lucene 常用功能介绍** Lucene 是一个高性能、全文检索库,由Apache软件基金会开发并维护。...结合课程文档和视频讲解,可以更深入地理解Lucene的工作原理和使用技巧,从而更好地利用它来解决实际的搜索问题。
除了基本的搜索外,Lucene还支持过滤器(Filter)和排序(Sort)功能。过滤器可以快速筛选满足特定条件的文档,而排序则允许用户自定义搜索结果的排列顺序。 8. **更新与删除** Lucene允许动态更新和删除文档,...
自定义排序在Lucene中主要通过`Sort`类来实现。`Sort`对象允许我们指定一系列的排序规则,这些规则可以是基于文档字段的值,也可以是基于相关度得分。我们可以通过创建`SortField`对象来指定排序依据的字段和排序...
在Lucene中,`Sort`类用于控制搜索结果的排序方式,而`SortComparatorSource`是其内部组件,用于提供排序比较器。`MySortComparatorSource.java`可能是用户自定义的排序比较器源,它可以实现特定的排序逻辑,比如...
5. **分页和排序**:使用TopDocs和Sort对象,可以实现搜索结果的分页和自定义排序。 6. **实时更新**:通过NRT(Near Real Time)模式,Lucene能够在短时间内对索引进行更新并反映到搜索结果中。 **四、Lucene与...
然后,你可以使用`FieldComparatorSource`将这个比较器与`TopFieldCollector`或`Sort`对象关联起来。 在提供的博客链接中,作者可能详细介绍了如何设置这些步骤,并可能给出了具体的代码示例。例如,他们可能会展示...
本文将详细探讨这一版本的源码结构、主要功能以及API的使用方法。 一、Lucene 2.3.0概览 Lucene的核心功能包括文档索引、查询解析、评分和结果排序。在2.3.0版本中,这些功能得到了进一步增强,提升了性能和稳定性...
《Apache Lucene 4.6.1 官方文档详解》 Apache Lucene 是一个...通过深入学习Apache Lucene 4.6.1的官方文档,开发者可以掌握搜索引擎的核心原理,以及如何在实际项目中有效地使用Lucene,实现高效、精准的信息检索。
8. **自定义排序和分页**:在分组查询中,我们还可以定义每个组内文档的排序方式,以及在每个组中返回多少结果,这可以通过`Sort`对象来实现。 9. **实时更新**:如果索引是实时更新的,我们需要确保分组查询能够...
在实际应用中,Filter还可以与其他组件结合使用,如Sort(排序)和Highlight(高亮),以提供更丰富的搜索体验。例如,我们可以先使用Filter筛选出满足条件的文档,再根据某个字段进行排序,最后对高亮显示匹配的...
在信息检索和文本处理领域,Lucene是一款广泛使用的开源全文搜索引擎库。它为开发者提供了强大的文本分析、索引和查询功能,使得构建高效的搜索应用变得简单。本资料包重点探讨了基于Lucene的核心操作,包括去词、禁...
4. **过滤与排序**:源码中可能包含使用`Filter`和`Sort`类来限制搜索结果或按照特定标准(如日期、评分)排序的例子。 5. **更新与删除**:了解如何使用`IndexWriter`进行文档的更新和删除,这涉及到索引版本管理...
在信息检索领域,Lucene是一个广泛使用的全文搜索引擎库。它提供了强大的文本分析、索引和搜索功能,而排序作为搜索结果的重要组成部分,是Lucene的一个核心特性。本文将深入探讨Lucene如何根据关键词出现次数进行...
5. **过滤与排序**:除了返回最相关的搜索结果,我们还需要对结果进行过滤(例如,按日期或评分排序),这可以通过Filter和Sort类来实现。 6. ** faceted search(面式搜索)**:在大型信息集合中,提供分类浏览和...