首先,我们应该有一个概念,在Lucene的内置排序方法中,升降序规则默认都是natural ording,即在Sorting by relevance中默认desc,在其他排序中则是asc。
1.Sorting by relevance,中文可以叫"适当的排序"?好象有点别扭,呵呵.这也是Lucene的默认排序,即按评分结果倒序排列.
      以下几种search方法都是实现的同样的效果:
      search(Query query,null),search(Query query,Sort.RELEVANCE),search(Query query,new Sort())
      结果首先按照评分结果desc排序,如果评分相同,则按照document id asc排序,其中,document id是document在索引时的先后顺序。
    2.Sorting by index order,按照索引的先后顺序asc排列。
    3.Sorting by a field,按field排序。field是在索引时建立的单元。这里需要注意的一点是,如果想按照field来排序,需要几个规则:首先,这个 field必须是indexed and not tokenized,就是需要索引,但是不能分词,例如Field.KEYWORD()方法;这个field必须可以转换成 Integers,Floats,Strings,可以在用Field生成Sort对象的时候指定field的类型。
   
    正像前边提到的,在lucene中的默认结果升降序规则是natural ording,当然我们也可以自己指定排序的升降序规则。
    首先,我们指定结果按照某一个field来desc排序(如果不指定,field是按照asc排序)。例 如,IndexSearcher.search(Query query,new Sort("date",true)),这里参数true的作用既是使得结果按照date field按照降序排列,这样我们就可以将日期最近的结果排列到最前面。
    通常,排序规则不会这么简单。例如,在某一个图书查询系统中,我们需要的排序规则是,首先按照图书的目录排序,然后同一目录的图书按照评分结果排序,评分结果相同并且目录相同的图书按照出版日期降序排列,代码片段如下:
    indexSearcher.search(Query query,new Sort(
        new SortField[]{
            new SortField("category"),
            SortField.FIELD_SCORE,
            new SortField("pubmonth", SortField.INT, true)
        }
    )
    这里,我们指定了一个SortField的数组,图书目录按照字典升序排列,然后目录相同的按照评分结果降序排列,最后按照出版日期降序排列。
    其实,在lucene内部自动维护了一个排序的数组,只是在这个例子中,我们显示的指定了排序的规则而已。

排序对查询性能的影响。排序需要额外的资源消耗,更多的内存消耗。lucene只是缓存实际需要排序的field。即使如此,如果需要自定义排序,仍然需要仔细的规划,记住,按照一个String来排序将花费最大的资源。

转载于:https://www.cnblogs.com/lcuzhanglei/archive/2012/08/01/2618467.html

自定义的Sort对象相关推荐

  1. 详解Python项目开发时自定义模块中对象的导入和使用

    背景:1)任何一个Python程序文件既可以直接执行,也可以作为模块导入再使用其中的对象:2)对于大型系统开发,一般不会把所有代码放到单个文件中,而是根据功能将其分类并分散多个模块中,在编写小型项目时 ...

  2. Android中使用Intent进行窗体切换,并且传值和自定义类的对象详解

    在Android中,Intent对象负责各个Activity窗口之间的切换,同时他更担负起数据传输重任. 一般情况下,使用Intent对象进行简单窗口切换的代码如下: Intent i=new Int ...

  3. python导入模块中的对象_详解Python项目开发时自定义模块中对象的导入和使用

    背景:1)任何一个Python程序文件既可以直接执行,也可以作为模块导入再使用其中的对象:2)对于大型系统开发,一般不会把所有代码放到单个文件中,而是根据功能将其分类并分散多个模块中,在编写小型项目时 ...

  4. 扫描识别工具Dynamic Web TWAIN使用教程:如何自定义Web TWAIN对象

    Dynamic Web TWAIN是一个专为Web应用程序设计的TWAIN扫描识别控件.你只需在TWAIN接口写几行代码,就可以用兼容TWAIN的扫描仪扫描文档或从数码相机/采集卡中获取图像. 本文教 ...

  5. java反射实现自定义json转对象方法-忽略字段大小写、字段个数

    java反射实现自定义json转对象方法-忽略字段大小写.字段个数 开发过程中经常会遇到json转对象,可以使用FastJson或者Gson自带的工具类进行转换,但当遇到json与对象属性名称大小写不 ...

  6. python中对象不可迭代_【转】Python中自定义可迭代对象

    python 中内置的可迭代的对象有 list.tuple.set.dict 等,那么我们自己怎么定义一个可迭代的对象呢?先来段代码吧 import re import reprlib RE_WORD ...

  7. R语言常用基础函数:使用edit函数调用数据编辑器手动自定义编辑数据对象不改变原始数据对象内容、使用fix函数调用数据编辑器手动自定义编辑数据对象并直接覆盖原数据内容

    R语言常用基础函数:使用edit函数调用数据编辑器手动自定义编辑数据对象不改变原始数据对象内容.使用fix函数调用数据编辑器手动自定义编辑数据对象并直接覆盖原数据内容 目录

  8. dynamic web twain java_扫描识别工具Dynamic Web TWAIN使用教程:如何自定义Web TWAIN对象...

    Dynamic Web TWAIN是一个专为Web应用程序设计的TWAIN扫描识别控件.你只需在TWAIN接口写几行代码,就可以用兼容TWAIN的扫描仪扫描文档或从数码相机/采集卡中获取图像. 本文教 ...

  9. c语言中如何自定义sort,c – 如何重载自定义std :: sort比较函数?

    使用std :: sort时,如何重载我正在使用的自定义比较函数? #include #include #include #include class Misc { public: // Commen ...

最新文章

  1. 教你认识动态链接库DLL文件
  2. Java后端架构开荒实战(一)——基础设施
  3. Wi-Fi Expert专业无线网测试软件
  4. Emlog5.31后台登录页面自适应源码
  5. mysql创建索引以及进程过程中出现的问题
  6. SpringBoot实战(八):集成Swagger
  7. Android Studio安装以及Fetching android sdk component information超时的解决方案
  8. 关于redis启动流程介绍
  9. 【OOB】MSHTML!CPaste­Command::Convert­Bitmapto­Png heap-based buffer overflow学习
  10. IT 技能发展:10 大基本 IT 技能
  11. FatMouse believes that the fatter a mouse is, the faster it runs.
  12. 【渝粤教育】广东开放大学 经济法基础 形成性考核 (38)
  13. 代码实现HelloMeituanCom转换为hello.meituan.com
  14. 父页面js监听iframe内子页面并作出响应
  15. 239页11万字新型智慧城市运营中心IOC大数据平台建设方案
  16. 如何迅速练好英语口语?
  17. ipa 修改服务器地址,iOS重签名 – ipa包(服务器适用)
  18. 用二叉树表示家谱关系并实现各种查找功能
  19. PTA平台,jmu-python-字符串-统计不同字符个数
  20. COL FIRST_NAME FORMAT A15

热门文章

  1. pythonscrapy爬虫_零基础写python爬虫之使用Scrapy框架编写爬虫
  2. python中文件路径如何读取提示nosuch file_Python 解决相对路径问题:No such file or directory...
  3. 线程Java的两种方式_多线程(java和guava两种方式):
  4. 虚幻4皮肤材质_虚幻4渲染编程(材质编辑器篇)【第六卷:各向异性材质amp;玻璃材质】...
  5. 编译错误 fatal error C1010: unexpected end of file while looking for precompiled header directive
  6. Zephyr OS 内核篇: 内核链表
  7. Pixhawk之姿态控制篇(1)_源码算法分析(超级有料)
  8. Python常见数据结构整理
  9. sublime配置c++环境
  10. pb,json,二进制,xml数据对比