在sql语句中,有升序和降序排列。在Lucene中,同样也有。

Sort里的属性 SortField里的属性 含义
Sort.INDEXORDER SortField.FIELD_DOC 按照索引的顺序进行排序
Sort.RELEVANCE SortField.FIELD_SCORE 按照关联性评分进行排序
=========SortField类============
//field是排序字段type是排序类型
public SortField(String field, Type type);
//field是排序字段type是排序类型reverse是指定升序还是降序
//reverse 为true是降序 false为升序
public SortField(String field, Type type, boolean reverse) =========Sort类============
public Sort();//Sort对象构造方法默认是按文档评分排序
public Sort(SortField field);//排序的一个SortField
public Sort(SortField... fields)//排序的多个SortField可以传入一个数组

前提,创建索引:

 import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Random; import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.IntField;
import org.apache.lucene.document.LongField;
import org.apache.lucene.document.NumericDocValuesField;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.FSDirectory; public class FileIndexUtils {
private static Directory directory = null;
static{
try {
directory = FSDirectory.open(Paths.get("D://lucene//document"));
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public static Directory getDirectory(){
return directory;
}
/**
* 创建索引
* @param hasNew
*/
@SuppressWarnings("deprecation")
public static void createIndex(boolean hasNew){
IndexWriter writer = null;
try {
writer = new IndexWriter(directory, new IndexWriterConfig(new StandardAnalyzer()));
if(hasNew){
writer.deleteAll();
} Document document = null;
int index = 0;
//随机数,为排序数字
Random random = new Random();
//为源文件创建索引
File file = new File("D://text");
for(File f:file.listFiles()){
int score = random.nextInt();
document = new Document();
document.add(new Field("id",String.valueOf(index++), Field.Store.YES,Field.Index.NOT_ANALYZED_NO_NORMS));
document.add(new Field("content",new FileReader(f)));
document.add(new Field("fileName",f.getName(),Field.Store.YES,Field.Index.NOT_ANALYZED));
document.add(new Field("path",f.getPath(),Field.Store.YES,Field.Index.NOT_ANALYZED));
document.add(new IntField("score",score,Field.Store.YES));
document.add(new NumericDocValuesField("size",(long)f.length()));
document.add(new LongField("size", f.length(), Field.Store.YES));
document.add(new IntField("date",(int) f.lastModified(),Field.Store.YES));
writer.addDocument(document);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
if(writer!=null){
try {
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

一,Sort排序

getSearcher()

 private static IndexReader reader = null;
static{
try {
reader = DirectoryReader.open(FileIndexUtils.getDirectory());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
} public IndexSearcher getSearcher(){
try {
if(reader == null){
reader = DirectoryReader.open(FileIndexUtils.getDirectory());
}else{
IndexReader tr = DirectoryReader.openIfChanged((DirectoryReader) reader);
if(tr!=null) {
reader.close();
reader = tr;
}
}
return new IndexSearcher(reader);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
   /**
* 排序Sort
* @param queryStr
* @param sort
*/
public void searcherBySort(String queryStr,Sort sort) {
try {
IndexSearcher searcher = getSearcher();
QueryParser parser = new QueryParser("content",new StandardAnalyzer());
Query query = parser.parse(queryStr);
TopDocs tds = null;
if(sort!=null)
tds = searcher.search(query, 50, sort);
else {
tds = searcher.search(query, 50);
}
for(ScoreDoc sd:tds.scoreDocs) {
Document d = searcher.doc(sd.doc);
System.out.println(sd.doc+":("+sd.score+")" +
"["+d.get("fileName")+"【"+d.get("path")+"】---"+d.get("score")+"--->"+
Integer.valueOf(d.get("size"))/1024+"-----");
} } catch (Exception e) {
e.printStackTrace();
}
}

测试:

    @Test
public void test01(){
st.searcherBySort("select",Sort.RELEVANCE);
System.out.println("------------");
st.searcherBySort("select",null);
}

二、SortField

/**
* 排序SortField
* @param sortField
* @param reverse
*/
public void searcherBySortField(String filename,boolean reverse){
try {
IndexSearcher searcher = getSearcher();
SortField sortField = new SortField(filename,SortField.Type.LONG,reverse);
Sort sort = new Sort(sortField); TopDocs tds = searcher.search(new MatchAllDocsQuery(),100,sort);
for(ScoreDoc sd:tds.scoreDocs){
Document d = searcher.doc(sd.doc);
System.out.println("["+d.get("fileName")+"]【"+d.get("path")+"】---score:"+d.get("score")+"--->"+"size:"+d.get("size"));
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally{
try {
if(reader!=null){
reader.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

测试:

    @Test
public void test02(){
st.searcherBySortField("size", false);
System.out.println("------------");
}

size根据大小排序。

Lucene 排序 Sort与SortField的更多相关文章

  1. 转:详细解说 STL 排序(Sort)

    详细解说 STL 排序(Sort) 详细解说 STL 排序(Sort) 作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1. ...

  2. 设计模式 - 模板方法模式(template method pattern) 排序(sort) 具体解释

    模板方法模式(template method pattern) 排序(sort) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考模板方法模式(tem ...

  3. [js] - 关于js的排序sort

    js的排序sort并不能一次排序好 function solution(nums){ return nums.sort(sortNumber); } function sortNumber(a, b) ...

  4. 给乱序的链表排序 · Sort List, 链表重排reorder list LoLn...

    链表排序 · Sort List [抄题]: [思维问题]: [一句话思路]: [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图]: quick ...

  5. 详细解说 STL 排序(Sort)(转)

    作者Winter 详细解说 STL 排序(Sort) 0 前言: STL,为什么你必须掌握 1 STL提供的Sort 算法 1.1 所有sort算法介绍 1.2 sort 中的比较函数 1.3 sor ...

  6. Excel VBA解读(54):排序——Sort方法

    Excel VBA解读(54):排序——Sort方法 看看下面的Excel界面截图,“排序”和“筛选”往往在一起,这大概是很多数据需要先排序后筛选吧  首先以“性别”作为排序字段,升序排列,并且第一行 ...

  7. sort排序,按指定字段进去重,sort -t "^" -k 8 -su,ls给文件名中数字排序sort -k1.5n,Tab符要转义

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  8. 详细解说 STL 排序(Sort)

    0 前言: STL,为什么你必须掌握 对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算 ...

  9. 53. 特殊的O(n)时间排序[sort ages with hashtable]

    [本文链接] http://www.cnblogs.com/hellogiser/p/sort-ages-with-hashtable.html [题目] 某公司有几万名员工,请完成一个时间复杂度为O ...

随机推荐

  1. Git push 时每次都需要密码的疑惑

    2015.1.13更新: 在本地搭建Git服务器时,也是有每次操作需要密码的情况. 是因为每次做推送动作时,Git需要认证你是好人.所以需要密码. 可以在 /home/username/.ssh/au ...

  2. Linux内核学习笔记2——Linux内核源码结构

    一 内核组成部分 内核是一个操作系统的核心,主要由五个部分组成:进程调度,内存管理,虚拟文件系统,网络结构,进程间通信. 1.进程调度(SCHED) 控制进程对CPU的访问.当需要选择下一个进程运行时 ...

  3. Android开发必知--WebView加载html5实现炫酷引导页面

    大多数人都知道,一个APP的引导页面还是挺重要的,不过要想通过原生的Android代码做出一个非常炫酷的引导页相对还是比较复杂的,正巧html5在制作炫酷动画网页方面比较给力,我们不妨先利用html5 ...

  4. Android学习笔记(十二)BroadcastReceiver的有序广播和优先级

    前两篇博文中简单整理了普通广播,其实还有有序广播,有序广播在开发中也是比不可少的,可以给广播接收者设定优先级来控制接受顺序,并却可以中断广播传递等等. 一.两种Broadcast: · 普通广播(No ...

  5. parseSdkContent failed Could not initialize class android.graphics.Typeface

    Deleting ".android" is temporarily fixing the problem with me as after sometime it begins ...

  6. hdoj 2404 Permutation Recovery【逆序对】

    Permutation Recovery Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  7. Python中的判断、循环 if...else,while

    if...else语句: a=3; b=3; if a == b :print(a,b)elif a <= b :print(str(a) + " is less than " ...

  8. 关于Parse库的配置问题

    在使用Parse的一些相关服务时候,需要下载Parse的SDK,除了需要添加相应的系统框架和库的支持 AudioToolbox.framework CFNetwork.framework CoreGr ...

  9. 恭贺自己itpub和csdn双双获得专家博客称号

    这是对一个技术人员行业内很难得的认可,记录下来,加油...一切向钱看,明天会更好.

  10. oracle7

    管理初始化参数 管理初始化参数(调优的一个重要知识点,凭什么可以对数据库进行调优呢?是因为它可以对数据库的一些参数进行修改修正) 初始化参数用于设置实例或是数据库的特征.oracle9i提供了200多 ...