如欲转载,请注明作者:caocao,来源http://caocao.iteye.com/。
Lucene的搜索结果默认按相关度排序,这个相关度排序是基于内部的Score和DocID,Score又基于关键词的内部评分和做索引时的boost。默认Score高的排前面,如果Score一样,再按索引顺序,先索引的排前面。那么有人问了,如果我要先索引的排后面怎么办呢?隐士研究了源码后发现这是相当简单的事情。以下代码基于Lucene 2.0。
看Sort的默认构造函数,相关度就是SortField.FIELD_SCORE和SortField.FIELD_DOC的组合。
java 代码
-
-
-
-
-
- public Sort() {
- this(new SortField[] { SortField.FIELD_SCORE, SortField.FIELD_DOC });
- }
那么该如何构造我们需要的SortField呢?请看SortField的一个构造函数,有一个参数reverse可供我们调整结果集的顺序。
java 代码
-
-
-
-
-
-
-
- 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)即可得到了期望的结果。
具体实例可参考隐士做的搜索站http://so.mdbchina.com。
分享到:
相关推荐
Lucene 排序算法是搜索引擎中的核心组件之一,负责将搜索结果按照相关度排序以便用户快速找到所需信息。 Lucene 的排序算法主要基于 tf-idf 模型,以下是 Lucene 排序算法的详细介绍: 1. tf(Term Frequency):...
首先,Lucene的核心功能之一就是提供高效的全文检索能力,但默认的搜索结果排序通常是基于相关度得分(Relevance Score),这是由TF-IDF算法计算得出的。然而,在实际应用中,我们往往需要根据其他因素(如时间、...
- **排序**:通过调整查询参数,可以基于文档的相关度、发布日期或其他自定义字段对结果进行排序。 - **分页**:为了提高用户体验,搜索引擎通常会限制每次返回的结果数量,实现分页展示,如每页10条记录。 - **...
"luceneDemo(完整代码)"是一个实践项目,旨在帮助开发者深入理解Lucene的基础类运用、高亮器实现以及相关度排序等核心概念。 首先,我们来看看基础类的运用。在Lucene中,IndexWriter是创建和更新索引的主要类,...
首先,Lucene的默认排序方式是基于文档得分,即通过TF-IDF(词频-逆文档频率)算法来评估文档与查询的相关度。TF(t in d)表示词条t在文档d中的出现次数,IDF(t)衡量的是词条t在整个文档集合中的稀有程度。同时,...
2. 相关度排序:Lucene 使用相关度排序公式对搜索结果进行排序。 3. VSM 和 BM25:VSM(Vector Space Model)和 BM25 是两种常用的相关度排序算法。 4. Lucene 优化:Lucene 优化是指对 Lucene 的配置和参数进行调整...
因此,可能需要结合医学知识图谱,引入相关度更高的排序因子,如疾病的相关性、症状的严重程度等。此外,还可以考虑时间因素,将最新的研究成果优先展示。 再者,个性化搜索也是优化的关键点。用户的行为、地理位置...
Lucene是一个开源的Java库,其核心功能包括文档索引、搜索、排序以及相关的文本分析工具。它的主要任务是创建索引,将非结构化的文本数据转换成可以快速查询的结构化形式。Lucene支持多种数据源,如文件系统、数据库...
除了基本的搜索功能,Lucene.net还提供了如高亮显示搜索结果、地理位置搜索、评分排序等功能。开发者可以根据需求通过扩展Lucene.net的功能来满足特定场景的应用。 **七、实战案例** 学习文档中可能包含了一些实际...
全文检索与数据库中的LIKE关键字查询不同,LIKE虽然能进行模糊匹配,但其结果可能不准确,没有相关度排序,且效率较低。 【Lucene简介】 Lucene是一个由Java编写的高性能、可扩展的全文搜索引擎库。它提供了一种...
2. **排序与评分(Sorting & Scoring)**: Lucene 支持基于相关性的排序,通过 TF-IDF(Term Frequency-Inverse Document Frequency)等算法计算文档的相关度。 3. **多字段搜索(Multi-Field Searching)**: 用户...
同时,可以提供方法来计算相关度、过滤重复结果等。 ### 3. Lucene性能优化 #### 3.1 分片与分布式 在大数据量场景下,可以采用分片策略,将索引分散到多个节点上,利用Lucene的分布式搜索能力,提高查询效率。 ...
7. **搜索相关度评分(Score)**:Lucene为每个匹配查询的文档计算一个分数,表示其与查询的相似度。分数的计算涉及多个因素,包括词频(tf)、逆文档频率(idf)、激励因子(boost)和长度规范(lengthNorm)。高...
Lucene允许根据多种因素对搜索结果进行排序,如相关度、时间戳等。此外,用户可以通过点击反馈调整搜索结果,Lucene支持对这些反馈信息进行学习,以改进未来的查询结果。 综上所述,Lucene是处理大数据量文本检索的...
6. **优化性能**:为了提高性能,Lucene提供了`SecondPassGroupingCollector`,它允许在第二轮搜索中仅检索每个组的最相关文档,而不是所有文档。这对于大型数据集特别有用,因为它减少了I/O操作。 7. **注意内存...
`TopDocs` 结果包含了匹配文档的评分和排序信息,`ScoreDoc` 描述了每个匹配文档的相关度。 6. **评分与相关性**:Lucene 4.0.0 引入了 BM25 相关性算法,这是一种改进的 TF-IDF 模型,能够更好地处理文档长度不...
- **评分(Scoring)**:Lucene根据查询与文档的相关度计算得分,用于排序搜索结果。 2. **Web集成**: - **Servlet/Filter**:在Web应用中,可以使用Servlet或Filter来接收用户请求,调用Lucene进行查询,然后...
- **排序**:全文检索结果按相关度排序,数据库搜索通常无排序。 - **速度**:全文检索速度快,通常在毫秒级别,而数据库搜索可能较慢。 4. **全文检索工作流程与倒排索引** - **信息采集与加工**:信息从源头...
Lucene的搜索结果排序基于相关度评分,该评分基于查询项在文档中的出现频率、位置等因素。提供的代码示例可以帮助理解如何进行搜索操作和处理结果。 此外,公用类和配置文件是实际开发中不可或缺的部分。公用类通常...