`
iluoxuan
  • 浏览: 574895 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

luecene排序Sort对象

 
阅读更多

1:参加lucene in action 5.2

 

下载地址:

 

 

基本介绍:

Lucene的默认排序是按照Document的得分进行排序的。当检索结果集中的两个Document的具有相同的得分时,默认按照Document的ID对结果进行排序。 

下面研究几种设置/改变检索结果排序的方法。 

1、改变Document的boost(激励因子) 
改变boost的大小,会导致Document的得分的改变,从而按照Lucene默认的对检索结果集的排序方式,改变检索结果中Document的排序的提前或者靠后。在计算得分的时候,使用到了boost的值,默认boost的值为1.0,也就说默认情况下Document的得分与boost的无关的。一旦改变了默认的boost的值,也就从Document的得分与boost无关,变为相关了:boost值越大,Document的得分越高。 

2、改变Field的boost(激励因子) 
改变Field的boost值,和改变Document的boost值是一样的。因为Document的boost是通过添加到Docuemnt中Field体现的,所以改变Field的boost值,可以改变Document的boost值。 

3、使用Sort排序工具实现排序 
Lucene在查询的时候,可以通过以一个Sort作为参数构造一个检索器IndexSearcher,在构造Sort的时候,指定排序规则。 
调用sort进行排序的方法是IndexSearcher.search,例如: 
IndexSearcher.search(query,sort); 

关于Sort类,在其内部定义了6种构造方法: 
    public Sort() // 
    public Sort(SortField field)  //通过构造某个域(field)的SortField对象根据一个域进行排序 
    public Sort(SortField[] fields) //通过构造一组域(field)的SortField对象组实现根据多个域排序 
    public Sort(String field) //根据某个域(field)的名称构造Sort进行排序 
    public Sort(String field, boolean reverse) //根据某个域(field)的名称构造SortField进行排序,reverse为true为升序 
    public Sort(String[] fields) //根据一组域(field)的名称构造一组Sort进行排序 

4、直接使用SortField实现排序 

   关于SortField类,在其内部定义了7种构造方法: 
public SortField (String field, boolean reverse)//根据某个域(field)的名称构造SortField, reverse为false为升序 
public SortField (String field, int type) 
public SortField (String field, int type, boolean reverse) 
public SortField (String field, Locale locale) 
public SortField (String field, Locale locale, boolean reverse) 
public SortField (String field, SortComparatorSource comparator) 
public SortField (String field, SortComparatorSource comparator, booleanreverse) 

type对应的值分别为: 
SortField. SCORE 按积分排序 
SortField. DOC 按文档排序 
SortField. AUTO 域的值为int、long、float都有效 
SortField.STRING 域按STRING排序 
SortField..FLOAT 
SortField.LONG 
SortField.DOUBLE 
SortField.SHORT 
SortField.CUSTOM 通过比较器排序 
SortField.BYTE 

   
5、自定义排序 
Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和ScoreDocComparator接口.在了解具体实现方法之前先来看看这两个接口的定义吧 

分享到:
评论

相关推荐

    lucene排序、设置权重、优化、分布式搜索.pdf

    可以使用 Sort 对象来指定排序字段和排序方式。 例如,下面的代码演示如何使用 Lucene 对搜索结果进行排序: ```csharp Sort sort = new Sort(new SortField("name", SortField.STRING)); TopDocs topDocs = ...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--data

    - 在查询时,通过设置Sort对象指定排序依据和顺序。 5. 高亮显示: - Lucene提供Highlighter类来高亮搜索结果中的关键词。首先,使用Analyzer分析文档内容,然后使用Highlighter找出关键词出现的位置,并用特定...

    Lucene3.3.0学习Demo

    - 结果排序的示例,可能包含如何自定义`Sort`对象以改变默认的排序方式。 通过这些Demo,你可以逐步理解Lucene的工作原理,学习如何在实际项目中集成和优化搜索功能。此外,3.3.0版本可能还涉及一些当时的特性,...

    lucene 权重设置

    - 如果同时设置了多个`SortField`,则会按照它们在`Sort`对象中定义的顺序进行排序,先按第一个字段进行排序,然后是第二个,以此类推。 - 查询时,`boost`、`SortField`和`SCORE`共存时,`Sort`会决定最终结果的...

    基于lucene的去词、禁词、搜索等操作

    用户可以通过Sort类定制排序规则,如按时间、相关性等排序。 4. 分页与结果限制:通过设置TopDocs和ScoreDoc对象,可以实现搜索结果的分页显示,同时限制返回的文档数量。 五、扩展与优化 1. 分布式搜索:随着...

    lucene-2.3.0-src

    3. **搜索模块**:`Searcher`执行查询,`Scorer`计算相关性分数,`Sort`定义结果排序规则。 4. **存储模块**:`RAMDirectory`和`FSDirectory`提供内存和文件系统上的索引存储。 三、主要特性 1. **多线程支持**:...

    Lucene Demo组件

    使用 `Sort` 类定义排序规则,并在执行查询时传递给 `IndexSearcher`。 5. **性能优化** - **批量索引**:一次处理大量文档比逐个添加更高效。 - **合并策略**:合理配置 `IndexWriter` 的合并策略,平衡磁盘...

    Lucene.NET 实例

    5. **结果排序与分页**:`Sort` 类可以用来指定搜索结果的排序依据,比如按照相关性(默认)或文档的某个字段值。而 `ScoreDoc` 和 `HitCollector` 接口则可用于实现分页,限制返回的搜索结果数量。 6. **性能优化*...

    lucene-3.1.0案例

    例如,通过FuzzyQuery可以实现相似度搜索,通过Filter可以限制搜索结果,通过Sort可以按照指定字段对结果进行排序。 总结来说,Lucene 3.1.0案例是一个全面展示Lucene搜索引擎能力的实践项目,涵盖了从索引构建、...

    基于lucene 的简单搜索引擎.rar

    通过Sort和Filter类,可以对搜索结果进行排序和过滤,如按相关性、日期等条件。 **4.3 多字段搜索** 可以构造复杂的Query,同时搜索多个字段。 **4.4 更新和删除索引** `IndexWriter`允许对已有索引进行更新和删除...

    lucene实例

    - **排序与过滤**: 可以使用Sort对象对结果进行自定义排序,或使用Filter进行结果过滤。 - **更新与删除**: Lucene支持对已索引文档的更新和删除操作,需要小心处理并发问题。 **总结** Lucene实例展示了如何利用...

    Lucene.net 2.0源码

    7. **扩展性**:除了基本功能,Lucene.NET 2.0 还提供了丰富的扩展点,如自定义存储(Directory)、过滤器(Filter)和排序(Sort)等,允许开发者根据项目需求进行定制。 通过深入研究Lucene.NET 2.0 的源码,...

    lucene-core-2.4.0的源码

    2. **排序(Sort)**:Lucene 2.4.0支持按字段值排序,可以是基于评分的排序或自定义的排序方式。 3. **分面搜索(Faceting)**:虽然2.4.0版本未直接支持,但可以通过自定义实现统计特定字段的频次,实现简单的分...

    Lucene In Action中文版第二章

    5. **过滤与排序**:除了基本的查询,Lucene还支持过滤(Filter)和排序(Sort)。过滤器可以限制搜索结果,比如只返回特定时间范围内的文档。排序则允许我们按照非相关性以外的标准,如日期或自定义字段值,对结果...

    Lucene3.0入门实例含jar包

    - **Document 对象**:在 Lucene 中,每个文档(如网页、电子邮件或任何其他文本)都表示为一个 Document 对象。Document 包含一系列 Field,每个 Field 表示文档的一个属性,如标题、内容等。 - **Field 类型**:...

    lucene3.5的API

    - **Sort**:用于排序搜索结果,可以基于字段值或评分进行排序。 3. **API 使用示例** - **创建索引**:首先创建一个 Analyzer,然后使用 IndexWriter 将文档添加到索引中。每个文档包含多个字段,如 `doc.add...

    lucene 2.9 api

    同时,`Sort`类允许根据字段对结果进行排序,提供了一种自定义搜索结果展示顺序的方式。 6. **高亮显示** Lucene提供了`Highlighter`组件,用于突出显示搜索结果中的匹配片段,这在展示搜索结果时非常有用。 7. *...

    Luncene学习资料

    【Lucene 排序】在Lucene中,排序是通过实现`Sort`类或使用`SortField`对象来完成的。排序不仅可以基于文档的分数(即查询的相关性),还可以基于文档的字段值。例如,你可以根据文档的创建日期、作者名或其他自定义...

    Lucnen示例,教学,演示代码。

    为了处理大量结果,可以使用 `SkipTo` 方法实现分页,以及 `Sort` 类实现自定义排序。 **10. 进阶主题** Lucene 还支持更复杂的功能,如近似搜索、模糊搜索、短语查询、地理位置搜索等。同时,可以通过自定义 `...

    基于Spring的Hibernate Search全文检索功能示例

    2. **排序**:使用`Sort`对象,可以根据相关性或其他字段对结果进行排序。 3. **过滤和分页**:可以添加`BooleanQuery`或`Filter`来限制搜索范围,同时使用`setFirstResult`和`setMaxResults`实现分页。 4. **实时...

Global site tag (gtag.js) - Google Analytics