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; 
    		
    

      

      

      

      

      

  • 相关阅读:
    OC
    OC
    OC
    OC
    OC
    Oracle wm_concat()函数
    字符串拼接
    easyui扩展数据表格点击加号拓展
    子tab里面新增tab(top.jQuery)
    combox datagrid重复请求问题
  • 原文地址:https://www.cnblogs.com/luxh/p/2559967.html
Copyright © 2011-2022 走看看