`

Lucene入门级笔记四 -- 对检索结果排序 .

    博客分类:
  • Java
 
阅读更多

对检索结果排序

 

1. 某些场合需要我们自定义搜索结果的排序方式,例如在电子商务网站上可能要求,对搜索出来的商品按照 “销售量”、"价格"、“好评数”等等排序.

 

2. 使用 Sort 类来定制排序方式

   Sort sort = new Sort();

   实例化出一个 Sort 对象之后,可以为它设置多个排序字段:

   Sort.setSort(SortField field...) ,如:

      SortField field = new SortField("id", SortField.LONG) // 表示对 id 按照升序(默认)排列

      // 按降序排列:

      SortField field = new SortField("id", SortField.LONG, true). // true 表示对排序结果,默认为升序,反转后就是降序

 

3. 测试代码:

/* 测试数据来源于 《Lucene-索引库的CRUD API 演示》 的 save 方法 */
public class SortTest {
        @Test
	public void test() throws Exception {
		// 搜索条件
		String queryString = "系统";
		// =================================================================
		// a, 把搜索字符串转为Query对象
		QueryParser queryParser = new QueryParser(Version.LUCENE_30, "content", Configuration.getAnalyzer());
		Query query = queryParser.parse(queryString);
		// b, 搜索,得到中间结果
		IndexSearcher indexSearcher = new IndexSearcher(Configuration.getDirectory());
		// --------------------------------------------
		// 自定义字段排序,效果就象数据库中的ORDER BY
		// TopDocs topDocs = indexSearcher.search(query, 100); // 返回前100条结果
		// TopDocs topDocs = indexSearcher.search(query, filter, n);
		// TopDocs topDocs = indexSearcher.search(query, filter, n, sort); // 参数 filter 可以设置为 null
		// Sort sort = new Sort(new SortField("id", SortField.LONG)); // 按id升序排列
		Sort sort = new Sort(new SortField("id", SortField.LONG, true)); // 按id降序排列,如果有多个排序要求,则增加多个SortField
		//sort.setSort(fields...)  // 添加多个排序
		TopDocs topDocs = indexSearcher.search(query, null, 100, sort);
		// --------------------------------------------
		ScoreDoc[] scoreDocs = topDocs.scoreDocs; // 前n条记录的信息
		// c, 处理结果
		List<Article> list = new ArrayList<Article>();
		for (int i = 0; i < scoreDocs.length; i++) {
			ScoreDoc scoreDoc = scoreDocs[i]; // 1,获得一个文档的信息
			Document doc = indexSearcher.doc(scoreDoc.doc); // 2,根据文档编号取出相应的Document
			list.add(ArticleDocumentUtils.document2Article(doc));// 3,把Document转为Article
		}
		// =================================================================
		// 显示结果
		for (Article article : list) {
			System.out.println("-------> id = " + article.getId());
			System.out.println("title   = " + article.getTitle());
			System.out.println("content = " + article.getContent());
		}
	}
}

 

 

分享到:
评论

相关推荐

    lucene笔记

    综上所述,Lucene是一个功能强大的全文检索工具包,它不仅提供了丰富的API用于构建高效、灵活的搜索应用,还支持多种高级特性如相关度排序、中文分词等,极大地提升了开发者在构建全文检索系统时的能力和效率。

    AnyFo - Lucene 千斤坠.doc

    总之,《AnyFo - Lucene 千斤坠》这份笔记对初学者理解Lucene的核心概念和基本操作具有很大帮助,同时也为有经验的开发者提供了快速参考。掌握这些知识后,开发者可以利用Lucene构建自己的全文搜索引擎,实现高效、...

    lucene学习资料

    一份适合初学者的Lucene入门指南,可能包含基本的安装步骤、简单的索引和搜索示例,帮助读者快速上手。 8. **lucene性能.txt** 这份文档可能涉及Lucene的性能优化技巧,包括索引存储、内存管理、查询效率等方面的...

    lucene学习笔记

    描述:Lucene学习笔记,Lucene入门必备材料 知识点: 一、Lucene概述与文档管理策略 Lucene是一款高性能、全功能的文本搜索引擎库,广泛应用于文档检索、全文搜索等场景。为了提升搜索效率,Lucene支持对不同频率...

    Lucene.net学习书记整理

    **Lucene.net学习笔记整理** 在信息技术领域,搜索引擎技术一直占据着重要的地位,尤其是在大数据时代,高效、精准的检索能力显得尤为重要。Lucene是Apache软件基金会的一个开源项目,它为Java开发者提供了一个高...

    搜索引擎lucene学习资料

    在"lucene总结.chm"文件中,可能包含了网友们对Lucene的详细学习笔记和实践心得。CHM是Microsoft编写的帮助文件格式,通常包含HTML页面和相关资源,便于用户查阅和学习。在这里,读者可以找到关于Lucene的API用法、...

    从入门到深入学习ES最全笔记

    【Elasticsearch 入门与深入学习】 Elasticsearch 是一款基于 Lucene 的开源全文搜索引擎,它提供了一个分布式、 RESTful 风格的搜索和分析引擎,适用于各种规模的企业。由于其高度可扩展性和易用性,Elasticsearch...

    elasticsearch基础知识,从小白到入门

    - **排序**:可以根据字段值对结果进行排序。 **聚合:** - **计数**:统计特定字段的不同值的数量。 - **分组**:按某个字段的值进行分组。 - **统计**:计算平均值、最大值等统计信息。 #### 六、映射与分析 **...

    Lucene+ElasticSearch入门至项目实战(Java高级、架构师必备套餐)

    1、熟练掌握Lucene框架的使用,实现类似百度、京东商城等应用的全文检索效果; 2、ElasticSearch下载安装(window以及linux下安装) 3、集群环境搭建 4、客户端Kibana安装与使用 5、集群管理插件head安装使用 6、...

Global site tag (gtag.js) - Google Analytics