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也可以自定义排序,这里没有给子例子
上一篇: 快速幂取模——python版
下一篇: lucene搜索结果排序之Payload