`
baobeituping
  • 浏览: 1068281 次
  • 性别: 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的类型对排序过程的效率有巨大的影响。

 

分享到:
评论

相关推荐

    lucene自定义排序实现

    在这个话题中,我们将深入探讨如何根据特定的业务需求对搜索结果进行定制排序。 首先,我们要明白 Lucene 默认的排序机制。默认情况下,Lucene 搜索结果是按照文档的相关性(即查询评分)进行排序的。这个评分是...

    lucene 多字段查询+文字高亮显示

    在信息检索系统中,用户可能希望根据多个字段来过滤和排序结果,例如,搜索一个用户时,可能同时关注其用户名、电子邮件和描述。Lucene支持这种多字段查询,你可以通过构建复杂的Query对象来实现。例如,可以创建一...

    Lucene3.0之查询类型详解

    - **Hits**:存储查询结果的集合,按相关性排序,方便结果展示和处理。 5. **查询类型**: - **TermQuery**:是最基本的查询类型,用于精确匹配单个词,大小写敏感。可以通过TermQuery构造函数或者QueryParser...

    Lucene分词与查询详解

    - 聚合(Faceting)功能可以对搜索结果进行分类统计,例如按商品类别或价格区间。 - 近实时搜索(Near Real Time Search)允许在索引更新后几乎立即看到变更。 Lucene的强大之处在于其灵活性和可扩展性,开发者可以...

    lucene4.3 按坐标距离排序

    首先,Lucene 4.3引入了对地理空间搜索的支持,这允许我们根据地理位置坐标对文档进行排序。这种功能在许多现代应用中非常实用,比如地图应用、本地搜索服务或任何需要按地理位置相关性展示结果的场景。 要实现按...

    Lucene5学习之自定义排序

    然而,在实际应用中,我们往往需要根据其他因素(如时间、价格、用户评分等)对搜索结果进行排序。这就需要我们了解如何自定义排序。 自定义排序在Lucene中主要通过`Sort`类来实现。`Sort`对象允许我们指定一系列的...

    lucene排序.zip

    当用户发起搜索时,Lucene会计算每个匹配文档的TF-IDF值,并按照这个值的大小对搜索结果进行降序排列,使得最相关的文档排在前面。 然而,有时候我们可能需要根据关键词在文档中出现的次数来进行排序,这可以通过...

    lucene的查询语法事例

    - **缓存 (Caching)**:为了提高查询性能,可以对频繁使用的查询结果进行缓存。 - **预分析 (Analyzer)**:选择合适的分词器(Analyzer)对查询词进行预处理,确保与索引中的处理方式一致。 - **过滤器 (Filtering...

    lucene实现索引查询

    它提供了完整的搜索功能,包括分析、索引、查询以及结果排序等。在Java开发中,Lucene 提供了丰富的API来简化这些操作。以下是关于使用Lucene实现索引查询的详细知识: ### 一、创建索引 创建索引是Lucene的核心...

    深入了解Lucene之三 排序算法.doc

    Lucene 排序算法是搜索引擎中的核心组件之一,负责将搜索结果按照相关度排序以便用户快速找到所需信息。 Lucene 的排序算法主要基于 tf-idf 模型,以下是 Lucene 排序算法的详细介绍: 1. tf(Term Frequency):...

    Lucene索引和查询

    - 结果排序(Sorting):根据评分对匹配到的文档进行排序,返回最相关的文档。 项目中,用户可以输入查询,代码将执行这些步骤并返回匹配的文档列表。 **3. Lucene与Java** Lucene最初是用Java编写的,因此在Java...

    Lucene5学习之排序-Sort

    在这个主题中,我们将深入理解如何在Lucene 5中对搜索结果进行排序,以便提供更符合用户需求的检索体验。 **描述分析:** 虽然描述部分是空的,但我们可以根据常规的博客结构来推测内容。通常,这样的博客会涵盖...

    lucene的排序过滤和分页.zip

    排序是Lucene中的一项核心功能,允许我们根据文档的某个或多个字段来对搜索结果进行定制化排序。Lucene支持两种类型的排序:基于评分(Score Sorting)和基于字段(Field Sorting)。基于评分的排序默认按照相关性...

    lucene对数据库操作

    在这个主题中,我们将深入探讨如何利用Lucene对数据库中的数据进行索引和查询。 首先,我们需要理解Lucene的工作原理。Lucene通过分析文本,将其拆分为关键词(称为术语或tokens),然后创建一个倒排索引,这个索引...

    lucene实现企业产品检索

    - **排序与评分**:根据相关性(如TF-IDF)对结果进行排序,可以自定义评分函数。 - **过滤与聚合**:通过Filter和QueryWrapperFilter实现特定条件筛选,如价格区间、品牌筛选等。 - **分页与翻页**:限制每次返回的...

    Lucene0之结果排序.pdf

    【Lucene 结果排序原理】 Lucene 是一个流行的全文搜索引擎库,其结果排序是通过复杂的算法来实现的,旨在提供最相关的搜索结果。这一过程基于信息检索系统的“相关排序”概念,即根据文档与查询之间的相关性来排列...

    lucene引擎和sqlite数据库分词查询

    查询时,系统可以根据用户的查询条件,利用Lucene进行分词查询,并返回结果。同时,系统还可以后台实时统计单词频率,更新重点单词列表。对于重点句子的识别,可以分析每个文档中包含重点词的句子,根据上下文相关性...

    Lucene5学习之分页查询

    在查询执行阶段,我们通过`IndexSearcher`对预构建的索引进行查询,获取匹配的文档。`search()`方法返回的是`TopDocs`对象,它包含了匹配文档的分数和排序信息。 2. **分页查询的基本原理** 分页查询的关键在于...

    SSH + Lucene + 分页 + 排序 + 高亮 模拟简单新闻网站搜索引擎--data

    - **排序**:通过调整查询参数,可以基于文档的相关度、发布日期或其他自定义字段对结果进行排序。 - **分页**:为了提高用户体验,搜索引擎通常会限制每次返回的结果数量,实现分页展示,如每页10条记录。 - **...

Global site tag (gtag.js) - Google Analytics