欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

lucene排序

程序员文章站 2022-07-09 10:22:47
...

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

 

对单个字段排序:

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也可以自定义排序,这里没有给子例子

相关标签: lucene 排序