zoukankan      html  css  js  c++  java
  • Lucene的排序搜索

      默认根据文档查询的相关度得分来进行排序,得分越高,排名越前。

      1、设置Lucene的文档对象Document中的一个促进因子,可以提高相关度得分。

    Book book = new Book();
    book.setId(2);
    book.setTitle("建筑的永恒之道");
    book.setAuthor("亚历山大");
    book.setContent("《建筑的永恒之道》提出了一个关于建筑设计、建筑和规划的新的理论、思想.");
    book.setPrice(65.5F);
    		
    Document doc = new Document();
    doc.add(new Field("id",String.valueOf(book.getId()),Store.YES,Index.NOT_ANALYZED));
    doc.add(new Field("title",book.getTitle(),Store.YES,Index.ANALYZED));
    doc.add(new Field("author",book.getAuthor(),Store.YES,Index.ANALYZED));
    doc.add(new Field("price",String.valueOf(book.getPrice()),Store.YES,Index.ANALYZED));
    doc.add(new Field("content",book.getContent(),Store.YES,Index.ANALYZED));
    		
    //设置促进得分因子值,值越大,得分越高.默认值是1.0F.
    doc.setBoost(2.0F);
    

      2、自定义排序。

      比如我们需要按图书的价格排序。我们需要用到IndexSearcher的search方法。search方法有很多的重载。我们使用search(Query query,int n,Sort sort)这个方法。

      search(Query query,int n,Sort sort)方法参数解释:

      query  -----> Lucene的查询对象。

      n        -----> 返回前n条记录。

      sort    -----> 排序对象。

    //按价格升序排序
    //Sort sort = new Sort(new SortField("price",SortField.FLOAT));
    		
    //按价格降序排序
    Sort sort = new Sort(new SortField("price",SortField.FLOAT,true));
    		
    //可按多个属性排序
    //Sort sort1 = new Sort(new SortField("price",SortField.FLOAT),new SortField("id",SortField.FLOAT));
    		
    //排序搜索,返回符合条件的前10条记录. TopFieldDocs是TopDocs的子类
    TopFieldDocs topFieldDocs = indexSearcher.search(query,10, sort);
    //搜索结果总数量
    int totalCount = topFieldDocs.totalHits;
    // 搜索的结果列表
    ScoreDoc[] scoreDocs = topFieldDocs.scoreDocs; 
    		
    

      

      

      

      

      

  • 相关阅读:
    面象对象设计原则之七:合成复用原则(Composition/Aggregate Reuse Principle, CARP)
    GRASP软件设计的模式和原则
    UniDAC 安装教程
    Delphi 实现检测线程类TThread是否结束
    DELPHI线程例子-FC
    Delphi Stringlist Delimiter如何区分TAB和空格
    DBGrid1
    UTF-8 delphi 函数
    未测试 Delphi读写UTF-8、Unicode格式文本文件
    mysql + unidac 使用事务例子
  • 原文地址:https://www.cnblogs.com/luxh/p/2559967.html
Copyright © 2011-2022 走看看