Lucene入门级笔记四 -- 对检索结果排序 .
对检索结果排序
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()); } } }
相关推荐
ztyzly00 2020-07-18
killgod 2020-06-14
小惠 2020-06-05
Oudasheng 2020-06-04
从零开始 2020-06-05
litterfrog 2020-05-30
老谢的自留地 2020-05-09
wulaxiaohei 2020-05-05
cyyking 2020-05-03
aaLiweipeng 2020-04-15
wordmhg 2020-04-09
wangqing 2020-04-06
Pinkr 2020-03-12
dushine00 2020-02-21
dbhllnr 2020-02-18
zhujiangtaotaise 2020-01-26
chenchuang 2020-01-25
troysps 2020-01-24