《开发自己的搜索引擎》读书笔记——排序

  1. 相关度排序

    Searcher的explain方法,解释文档得分的具体情况。

    文档得分主要由4个部分内容来决定,即tf(词条频率)、idf(反转文档频率)、boost(Field的激励因子)和lengthNorm(长度因子)。

    tf值的计算方法时某个关键字在某文档中出现次数的平方根。

    在进行相关度排序的时候,如果想人为地增加某个文档的相关度,使其在搜索结果中排在更靠前的位置上,则可以使用boost。boost值是随着索引的建立而写入索引文档中的,因此,需要在建立索引时指定,也就是要在调用IndexWriter.addDocument为文档建立索引之前。

    在Lucene中,文档的boost值一般情况下默认为1.0,但当某个文档的boost值大于1.0后,所有的文档的boost值都会除以这个最大值,以此来为每一个文档获取一个小于1.0的数作为新的boost值。这也就是为什么在建立索引时,为某个文档设定其boost值大于1,但在搜索得到它时,取出它的boost值却是一个不大于1的数。同样,当某个文档的得分大于1时,Lucene也会进行类似操作。事实上,通过explain方法可以计算出文档的得分要大于1,但是显示出来的结果却是1。

    Lucene除了可以为Document设置boost值外,也可以为Field级别设置boost值。对Field的boost的值的改变将直接影响到Document的分值。

  2. 使用Sort来排序

    Sort类位于org.apache.lucene.search包中。Sort所提供的排序功能是以Field为基础的,即最终的排序准则,总是以某个(或多个)Field的值为基础。

    Sort的六个构造函数:

            public Sort();

            public Sort(String field);

            public Sort(String field,booleanreverse);

            public Sort(String[] fields);

            public Sort(SortField field);

            public Sort(SortField[] fields);

    其中reverse参数可以指明是升序还是降序,默认值为false,即降序。

    SortField实际上是一个包装类型,通过它的包装,可以使Sort类清楚地了解要进行排序的Field的各种信息。SortField的部分构造函数:

    public SortField(String field)

    public SortField(String field,boolean reverse)

    public SortField(String field,int type)

    public SortField(String field,int type,booleanreverse)

    为了方便,SortField提供了几个常量来标识,比如SortField.STRING、SortField.INT、SortField.FLOAT。

    Lucene在为每个Document建立索引的时候,Lucene回味每个文档建立一个内部的ID号。有时,会需要按照文档的内部ID号来对其进行排序。Sort类提供了直接的静态实例Sort.INDEXORDER表明当前的排序意图。但事实上,在真正的开发过程中,这种需求并不常见。

     

    对于Sort对象来说,其内部留有一个SortField类型的数组,无论是直接以字符串方式向其提供Field信息,还是先将Field封装成SortField对象后提交给它,最终在Sort内部,所有Field都会转化成SortField的对象数组进行保存。

    在Sort类的内部有多个重载的setSort方法,它们会将用户提交的String型的Field信息转成SortField的对象,并存放在内部的数组中,或是直接将用户提交的SortField数组作为内部数组,在排序时使用。

    比较字符串时,Locate信息的不同,很有可能会影响比较的结果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值