`
baobeituping
  • 浏览: 1042178 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Lucene 对所查的结果进行排序

阅读更多

前面介绍完查询以后,现在要对查询结果进行排序的显示。

代码:

package com.querytype;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.queryParser.QueryParser;
import org.apache.lucene.search.Hits;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.Sort;
import org.apache.lucene.search.SortField;

public class QuerySortDemo2 {

 /**
  * @param args
  */
 public static void main(String[] args) {
  try {
   /*
    * Document doc1 = new Document(); Field f1 = new
    * Field("bookNumber","003",Field.Store.YES, Field.Index.TOKENIZED);
    * Field f2 = new Field("bookname","钢铁是怎样炼成的",Field.Store.YES,
    * Field.Index.TOKENIZED); Field f3 = new
    * Field("publishdate","1970-01-01",Field.Store.YES,
    * Field.Index.TOKENIZED); doc1.add(f1); doc1.add(f2); doc1.add(f3);
    * Document doc2 = new Document(); f1 = new
    * Field("bookNumber","001",Field.Store.YES, Field.Index.TOKENIZED);
    * f2 = new Field("bookname","钢铁是怎样炼成的2",Field.Store.YES,
    * Field.Index.TOKENIZED); f3 = new
    * Field("publishdate","1990-01-01",Field.Store.YES,
    * Field.Index.TOKENIZED); doc2.add(f1); doc2.add(f2); doc2.add(f3);
    * Document doc3 = new Document(); f1 = new
    * Field("bookNumber","004",Field.Store.YES, Field.Index.TOKENIZED);
    * f2 = new Field("bookname","钢铁是怎样炼成的4",Field.Store.YES,
    * Field.Index.TOKENIZED); f3 = new
    * Field("publishdate","1980-01-01",Field.Store.YES,
    * Field.Index.TOKENIZED); doc3.add(f1); doc3.add(f2); doc3.add(f3);
    *
    * Document doc4 = new Document(); f1 = new
    * Field("bookNumber","004",Field.Store.YES, Field.Index.TOKENIZED);
    * f2 = new Field("bookname","钢铁是怎样炼成的4",Field.Store.YES,
    * Field.Index.TOKENIZED); f3 = new
    * Field("publishdate","1970-01-01",Field.Store.YES,
    * Field.Index.TOKENIZED); doc4.add(f1); doc4.add(f2); doc4.add(f3);
    *
    *
    * File file = new File("d://demo"); Analyzer luceneAnalyzer = new
    * StandardAnalyzer(); IndexWriter writer = new IndexWriter(file,
    * luceneAnalyzer, true); writer.setUseCompoundFile(true);
    * writer.optimize(); writer.addDocument(doc1);
    * writer.addDocument(doc2); writer.addDocument(doc3);
    * writer.addDocument(doc4); writer.close();
    */

   IndexSearcher search = new IndexSearcher("d://demo");

   String field = "bookname";
   String queryStr = "钢铁";
   QueryParser parser = new QueryParser(field, new StandardAnalyzer());
   Query q = parser.parse(queryStr);

//上面的查询是通过QueryParser来查询,下面通过SORT来进行排序,排序规则是首先根据bookNumber来排序,然后再根据publishdate来排序,第二个参数表示该字段是什么类型,第三个字段表示排列顺序(FALSH:升序,TRUE:降序)
   Sort sort = new Sort();
   SortField f1 = new SortField("bookNumber", SortField.INT, false);
   SortField f2 = new SortField("publishdate", SortField.STRING, false);
   sort.setSort(new SortField[] { f1, f2 });

//如果指定多个FIELD来进行排序,就把多个FIELD组合成数据塞到SORT中
   Hits hits = search.search(q, sort);
   System.out.println(q.toString());
   for (int i = 0; i < hits.length(); i++) {
    Document doc = hits.doc(i);
    System.out.println("书名:" + doc.get("bookname") + "\t\t");
    System.out.println("书号:" + doc.get("bookNumber"));
    System.out.println("出版日期:" + doc.get("publishdate"));
    System.out.println("#####################");
   }

  } catch (Exception e) {
   e.printStackTrace();
  }

 }

}

 

SortField提供的FIELD的类型:string,int,float.指定FIELD的类型对排序过程的效率有巨大的影响。

 

分享到:
评论

相关推荐

    Lucene3.0之结果排序

    传统上,人们将信息检索系统返回结果的排序称为"相关排序" (relevance ranking) ,隐含其中各条目的顺序反映结果和查询的相关程度。

    Lucene 3.6 学习笔记

    (4) 查询结果过滤(QueryWrapperFilter) 40 5.3 自定义评分 41 (1) 创建一个类继承CustomScoreQuery 41 (2) 创建一个类继承CustomScoreProvider 42 (3) 自定义评分效果测试 43 5.4 自定义QueryParser 44 (1) 限制低...

    java Lucene 中自定义排序的实现

    使用Lucene来搜索内容,搜索结果的显示顺序当然是比较重要的.Lucene中Build-in的几个排序定义在大多数情况下是不适合我们使用的.要适合自己的应用程序的场景,就只能自定义排序功能,本节我们就来看看在Lucene中如何...

    lucene例子

    Lucene 是一个开源、高度可扩展的搜索引擎库,可以从 Apache Software Foundation 获取。您可以将 Lucene 用于商业和开源应用程序。Lucene 强大的 API 主要关注文本索引和搜索。它可以用于为各种应用程序构建搜索...

    论文研究-基于Lucene的地名数据库快速检索系统.pdf

    其次,利用内存索引和多线程并行处理技术提高Lucene创建倒排索引效率,并依据地名类别和显示优先级属性优化了检索结果相关度排序策略。最后,开发了一套具有快速搜索和地图定位展示的Web地名检索系统,使用500万条...

    lucene4.8学习资料和案例

    lucene4.8学习资料和案例,自己学习整理。整理了各种查询,包括分页、排序等!对100W,500W,1000W三个级别的数据量分别进行了测试!

    Lucene介绍,全文检索

    Lucene是一个基于Java的全文索引工具包。 基于Java的全文索引引擎Lucene...另外,如果是在选择全文引擎,现在也许是试试Sphinx的时候了:相比Lucene速度更快,有中文分词的支持,而且内置了对简单的分布式检索的支持

    lucene5.5demo

    一个简单的lucene demo,使用Lucene5.5+springmvc+mysql开发,包括索引的增删改查,查询中可以高亮显示+分页+自定义排序,有兴趣的朋友可以看看

    Lucene全文检索引擎简介

    建立一个高效检索系统的关键是建立一个类似于科技索引一样的反向索引机制,将数据源(比如多篇文章)排序顺序存储的同时,有另外一个排好序的关键词列表,用于存储关键词==&gt;文章映射关系,利用这样的映射关系索引:...

    lucene笔记

    1、 Lucene介绍 a) 什么是lucene b) 全文检索的应用场景 c) 全文检索定义 2、 Luence实现全文检索的流程(重点) 3、 入门程序 4、 Field域(重点) 5、 索引维护 a) 添加索引 b) 删除索引 c) 修改索引 6、 搜索...

    Lucene:基于Java的全文检索引擎简介

    Lucene是一个基于Java的全文索引工具包。 1. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的...5. Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的 扩展 6. 从Lucene我们还可以学到什么

    人工智能-项目实践-搜索引擎-电影搜索引擎,基于lucene的电影搜索引擎,主要数据来源为百度新闻,豆瓣电影,百度百科,新浪微博

    Lucene检索主要包括建立索引和对结果文档的排序。搜索结果可视化通过spring MVC框架搭建完整的系统实现。 技术实现主要包括:基于Lucene的全文检索技术,spring MVC框架,java爬虫技术,Python爬虫技术,...

    lucene详解.doc

    1. 基于Java的全文索引引擎Lucene简介:关于作者和Lucene的历史 2. 全文检索的实现:Luene全文索引...5. Hacking Lucene:简化的查询分析器,删除的实现,定制的排序,应用接口的扩展 6. 从Lucene我们还可以学到什么

    lumongo:使用Lucene和MongoDB进行分布式实时搜索

    使用Lucene进行分布式实时搜索 LuMongo是基于Lucene的实时分布式搜索和存储系统。 LuMongo从头开始设计,可以在服务器之间垂直和水平扩展。 LuMongo将Lucene索引直接存储到MongoDB中。 文档可以本地存储在MongoDB中...

    Lucene 原理与代码分析完整版.pdf

    2. 对字典按字母顺序进行排序。 ................................................................................ 17 3. 合并相同的词(Term)成为文档倒排(Posting List)链表。 ..................................

    lucene 教程详解

    搜索引擎一般由搜索器、索引器、检索器和用户接口四个部分组成: ... 其功能是根据用户的查询在索引库中快速检索文档,进行相关度评价,对将要输出的结果排序,并能按用户的查询需求合理反馈信息;

    Lucene 3.6.1完整案例

    Lucene 3.6.1: 中文分词、创建索引库、排序、多字段分页查询以及高亮显示源 希望对大家有帮助, 我自己建立的mysql数据库 使用了IKAnalyzer分词器源代码,大家可以自己设置停词,也可以自己改写算法

    Lucene IndexApplication:使用lucene索引文本文档-开源

    按任何字段进行日期范围搜索和排序。 增量索引与批量索引一样快。 Quartz.NET 引擎,用于搜索索引服务的自定义作业调度。 自动和安排 Lucene 搜索索引的构建。 用于记录系统消息的通用日志框架。 您可以为严重和非...

    Lucinq.Sitecore:Sitecore 上用于 Lucene 的富有表现力的 API

    基于Lucene的排序 查询方式(包括但不限于) - 名称(包括通配符)、直接模板、基本模板、祖先、父级、语言或任意组合 查询操作 - 例如删除术语并重新运行。 为什么将 Lucinq 用于 Sitecore 简而言之,它更快。 在...

    solr 企业搜索引擎教程

     支持对结果进行动态的分组和过滤  高级的,可配置的文本分析  高度可配置和可扩展的缓存机制 5/8/2011 Page 4 5/8/20112009-02-17 版权所有,侵权必究All rights reserved 第4页,共56页Page 4 , Total56  ...

Global site tag (gtag.js) - Google Analytics