`
liulanghan110
  • 浏览: 1075549 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

lucene排序

阅读更多

只需要在查询的同时传入排序字段,

 

对单个字段排序:

Sort sort=new Sort(new SortField("price", Type.DOUBLE,false));//false为降序排列

 

对多个字段排序:

Sort sort=new Sort(new SortField("date", Type.INT, true),new SortField("ename", Type.STRING, false));

 

 

代码如下:

 /**
     * 多条件查询
     * @param path 索引文件路径
     * @param query 查询条件
     * @param sort 排序
     * @return 
     */
    public List<Document> complexSearch(String path,BooleanQuery query,Sort sort) {
        List<Document> docList = new ArrayList<>();
        try {
            directory = FSDirectory.open(new File(path));//打开索引文件夹  
            IndexReader reader = DirectoryReader.open(directory);//读取目录  
            IndexSearcher search = new IndexSearcher(reader);//初始化查询组件  
            TopDocs td ;
            if(sort != null){
                td = search.search(query, 10000,sort);//获取匹配上元素的一个docid 
            }else{
                td = search.search(query, 10000);//获取匹配上元素的一个docid         
            }
             
            for (ScoreDoc doc : td.scoreDocs) {
                docList.add(search.doc(doc.doc));
            }
            reader.close();//关闭资源  
            directory.close();//关闭连接  
        } catch (IOException e) {
        }
        return docList;
    }

 

注意几点 
(1)排序对一个文档里什么域都没存储,使用字符串排序会排在首位 
(2)排序对一个文档里什么域都没存储,使用数字类型排序会默认给其赋值为0进行排序 
(3)我们可以对数字类型的null值的文档进行代码控制,可以将其设置为最大,所以将会排在最后面,代码如下


  SortField sortField = new SortField("value", SortField.Type.INT);

  sortField.setMissingValue(Integer.MAX_VALUE);

 

 

lucene也可以自定义排序,这里没有给子例子

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics