场景:使用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的连接。这通常涉及到指定索引名称、表名等信息,以便后续的操作更加明确和高效。 ```java // 建立客户端...
在深入探讨Solr-search过程的源码分析时,我们聚焦于关键步骤与核心组件,以求全面理解Solr搜索机制的内部运作。Solr作为一款高性能、可伸缩的开源搜索平台,其搜索处理流程涉及多个层次的组件交互与数据处理,其中...
这里的`SortField`实例按照它们在`Sort`构造函数中的顺序决定优先级。 此外,Lucene5引入了`FieldComparatorSource`和`FieldDoc`接口,允许开发者自定义比较器和文档的排序行为。这些高级特性可以用来实现更复杂的...
你可以在Sort对象中添加多个SortField实例,Lucene会按照这些字段的顺序依次进行比较。如果前一个字段的值相同,那么就会使用下一个字段来决定排序。 ```java Sort sort = new Sort( new SortField("priceField", ...
在代码中,我们可以使用`SortField`对象来控制排序。 ```csharp SortFieldInfo sortField = new SortFieldInfo("FieldName", SortDirection.Ascending); report.Database.Tables[0].SortFields.Add(sortField); ```...
在ASP.NET应用程序中,经常需要使用`DropDownList`这种服务器控件来进行数据选择。`DropDownList`控件可以方便地展示一系列选项供用户选择。然而,在某些场景下,可能会遇到一个问题:即在客户端(浏览器端)对`...
1. **排序原理**:在Flex中,我们可以使用`ArrayCollection.sort`方法配合`Sort`对象来实现排序。首先创建一个Sort对象,然后设置它的`fields`属性来指定排序的字段和排序规则,最后将这个Sort对象应用到...
在MVC4中,我们通常使用`PagedList.Mvc`库来实现这一功能。首先,需要在项目中安装这个NuGet包。然后,可以在控制器中创建一个分页模型,将数据库查询结果转换为分页集合。接着,在视图中,我们可以使用`...
如果你的数据源来自数据库,可以在SQL查询中使用`ORDER BY`子句来指定排序字段和排序方式(升序或降序)。 ```sql SELECT * FROM TableName ORDER BY SortField ASC/DESC ``` #### 3.2 LINQ排序 对于对象集合,...
在这个例子中,`page`参数表示当前页码,`sortField`和`sortOrder`用于排序。视图(View)可以使用这些信息来构建分页链接,例如: ```html @using (Html.BeginForm("Index", "Products", FormMethod.Get)) { ...
- 查询时,`boost`、`SortField`和`SCORE`共存时,`Sort`会决定最终结果的顺序,`boost`设置可能会被忽略,除非它也被用于`SortField`中。 7. **搜索相关度评分(Score)**:Lucene为每个匹配查询的文档计算一个...
在上面的代码中,我们使用 Sort 对象来指定根据 "name" 字段进行升序排序。 二、Lucene 设置权重 Lucene 的设置权重是指根据某个字段的重要性对搜索结果进行加权。 Lucene 提供了多种加权方式,包括 TermQuery 和...
要对特定字段进行排序,我们需要创建一个`Sort`对象,并在`IndexSearcher`的`search`方法中传入。例如,如果我们希望根据名为"byNumber"的字段按整数降序排序,可以这样做: ```java Sort sort = new Sort(new ...
在Flex开发中,DataGrid控件是用于展示数据集的常用组件,它可以显示表格形式的数据并支持用户交互,如排序、选择和编辑。然而,有时我们可能需要对DataGrid的默认排序功能进行自定义,以满足特定的业务需求。本教程...
EXTJS Grid的排序功能是基于其内部的Store对象实现的,Store中的每条记录都有一个对应的sortField和sortDir属性,用于记录当前的排序字段和排序方向。当你点击列头进行排序时,Grid会调用Store的sort方法,根据指定...
为了使用这个trait,我们需要在我们的Eloquent模型中引入它。例如,假设我们有一个`Article`模型,我们可以这样做: ```php namespace App\Models; use App\Traits\AutoSort; use Illuminate\Database\Eloquent\...
在这个例子中,`SortField`对象指定了排序的字段("name"),以及使用`SortUtil.compareChineseStrings`作为比较函数,确保了中文名称的正确排序。 总的来说,处理`dataGrid`中的中文排序需要理解Unicode编码和字符...
在IT行业中,水晶报表(Crystal Reports)是一款广泛用于创建企业级报表的强大工具,尤其在.NET框架下,与C#结合使用能实现复杂的数据可视化和数据分析功能。本篇将深入探讨C#环境下水晶报表的“推模式”应用以及...
### 获取全部Luence数据 #### 知识点详解 **Lucene** 是一个高性能、全功能的...通过以上步骤,我们可以有效地使用Lucene获取索引中的所有文档,并对其进行处理和分析。这对于大数据量的全文检索场景具有重要意义。