`

hibernate search中使用SortField

阅读更多
场景:使用hibernate search,先按某字段rank排序,然后按相关度即文档得分进行排序。
model:
@Indexed
@Entity
@Table(name="book")
public class Book{

@DocumentId(name="book_id")
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="book_id", nullable=false)
private int bookId;

@Field(name="rank",index=Index.UN_TOKENIZED,store=Store.YES)
@Column(name="rank")
private String rank;

...(省略get,set方法及其他属性)
}


SortField[] sortFields = new SortField[2];
sortFields[0] = new SortField(“rank",SortField.STRING,true);//参数true表示将排序的结果反转
sortFields[1] = new SortField(null,SortField.SCORE);
Sort sort = new Sort(sortFields);

注意几点:
1.想要先按name排序再按相关度排序的话,必须得加上store=Store.YES,否则无论如何也
达不到要求,不知是只在hibernate search中这样,还是单纯用lucene也是这样

2.若只设置了一个sortfield的话,即只有
new SortField(“name",SortField.STRING,true),则会先按这个字段排序,然后按document添加到索引中的顺序排列

3.new SortField()的第三个参数为true表示是natural order的逆顺序,默认为false《lucene in
action 2nd edition》中介绍:
The default sort direction for sort fields (including relevance and document ID) is natural
ordering. Natural order is descending for relevance but increasing for all other
fields
. The natural order can be reversed per Sort object by specifying true for the second
argument.

4.若Book类是嵌在其它类中时,注意在字段前加上"book.",即
sortFields[0] = new SortField(“book.name",SortField.STRING,true);

5.另参见http://lucene-group.group.iteye.com/group/topic/17748
分享到:
评论

相关推荐

    elasticsearch应用开发

    #### 三、Elasticsearch核心功能及使用示例 ##### 建立客户端 在进行任何操作前,需要先建立与Elasticsearch的连接。这通常涉及到指定索引名称、表名等信息,以便后续的操作更加明确和高效。 ```java // 建立客户端...

    Solr-search过程源码分析

    在深入探讨Solr-search过程的源码分析时,我们聚焦于关键步骤与核心组件,以求全面理解Solr搜索机制的内部运作。Solr作为一款高性能、可伸缩的开源搜索平台,其搜索处理流程涉及多个层次的组件交互与数据处理,其中...

    Lucene5学习之自定义排序

    这里的`SortField`实例按照它们在`Sort`构造函数中的顺序决定优先级。 此外,Lucene5引入了`FieldComparatorSource`和`FieldDoc`接口,允许开发者自定义比较器和文档的排序行为。这些高级特性可以用来实现更复杂的...

    Lucene5学习之排序-Sort

    你可以在Sort对象中添加多个SortField实例,Lucene会按照这些字段的顺序依次进行比较。如果前一个字段的值相同,那么就会使用下一个字段来决定排序。 ```java Sort sort = new Sort( new SortField("priceField", ...

    如何在水晶报表中分组排序记录源程序实例,C#.net源代码编写,

    在代码中,我们可以使用`SortField`对象来控制排序。 ```csharp SortFieldInfo sortField = new SortFieldInfo("FieldName", SortDirection.Ascending); report.Database.Tables[0].SortFields.Add(sortField); ```...

    使用js添加DropDownList的项

    在ASP.NET应用程序中,经常需要使用`DropDownList`这种服务器控件来进行数据选择。`DropDownList`控件可以方便地展示一系列选项供用户选择。然而,在某些场景下,可能会遇到一个问题:即在客户端(浏览器端)对`...

    ArayyCollection排序

    1. **排序原理**:在Flex中,我们可以使用`ArrayCollection.sort`方法配合`Sort`对象来实现排序。首先创建一个Sort对象,然后设置它的`fields`属性来指定排序的字段和排序规则,最后将这个Sort对象应用到...

    Mvc4 分页 排序 搜索

    在MVC4中,我们通常使用`PagedList.Mvc`库来实现这一功能。首先,需要在项目中安装这个NuGet包。然后,可以在控制器中创建一个分页模型,将数据库查询结果转换为分页集合。接着,在视图中,我们可以使用`...

    Repeater的排序

    如果你的数据源来自数据库,可以在SQL查询中使用`ORDER BY`子句来指定排序字段和排序方式(升序或降序)。 ```sql SELECT * FROM TableName ORDER BY SortField ASC/DESC ``` #### 3.2 LINQ排序 对于对象集合,...

    MVC 分页 可添加自定义参数

    在这个例子中,`page`参数表示当前页码,`sortField`和`sortOrder`用于排序。视图(View)可以使用这些信息来构建分页链接,例如: ```html @using (Html.BeginForm("Index", "Products", FormMethod.Get)) { ...

    lucene 权重设置

    - 查询时,`boost`、`SortField`和`SCORE`共存时,`Sort`会决定最终结果的顺序,`boost`设置可能会被忽略,除非它也被用于`SortField`中。 7. **搜索相关度评分(Score)**:Lucene为每个匹配查询的文档计算一个...

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

    在上面的代码中,我们使用 Sort 对象来指定根据 "name" 字段进行升序排序。 二、Lucene 设置权重 Lucene 的设置权重是指根据某个字段的重要性对搜索结果进行加权。 Lucene 提供了多种加权方式,包括 TermQuery 和...

    Lucene4.X实战类baidu搜索的大型文档海量搜索系统-18.Lucene排序 共6页.pptx

    要对特定字段进行排序,我们需要创建一个`Sort`对象,并在`IndexSearcher`的`search`方法中传入。例如,如果我们希望根据名为"byNumber"的字段按整数降序排序,可以这样做: ```java Sort sort = new Sort(new ...

    Flex中如何创建自定义排序DataGrid控件的例子

    在Flex开发中,DataGrid控件是用于展示数据集的常用组件,它可以显示表格形式的数据并支持用户交互,如排序、选择和编辑。然而,有时我们可能需要对DataGrid的默认排序功能进行自定义,以满足特定的业务需求。本教程...

    Extjs grid 中文排序问题修正

    EXTJS Grid的排序功能是基于其内部的Store对象实现的,Store中的每条记录都有一个对应的sortField和sortDir属性,用于记录当前的排序字段和排序方向。当你点击列头进行排序时,Grid会调用Store的sort方法,根据指定...

    Laravel开发-autosortingmodeltrait

    为了使用这个trait,我们需要在我们的Eloquent模型中引入它。例如,假设我们有一个`Article`模型,我们可以这样做: ```php namespace App\Models; use App\Traits\AutoSort; use Illuminate\Database\Eloquent\...

    dataGrid中文排序

    在这个例子中,`SortField`对象指定了排序的字段("name"),以及使用`SortUtil.compareChineseStrings`作为比较函数,确保了中文名称的正确排序。 总的来说,处理`dataGrid`中的中文排序需要理解Unicode编码和字符...

    C# 水晶报表的使用案例推模式和报表排序

    在IT行业中,水晶报表(Crystal Reports)是一款广泛用于创建企业级报表的强大工具,尤其在.NET框架下,与C#结合使用能实现复杂的数据可视化和数据分析功能。本篇将深入探讨C#环境下水晶报表的“推模式”应用以及...

    获取全部Luence数据

    ### 获取全部Luence数据 #### 知识点详解 **Lucene** 是一个高性能、全功能的...通过以上步骤,我们可以有效地使用Lucene获取索引中的所有文档,并对其进行处理和分析。这对于大数据量的全文检索场景具有重要意义。

Global site tag (gtag.js) - Google Analytics