solr搜索结果按更新时间与关键字相关度排序

  项目中用solr(lucene内核)来完成全文检索。项目中需求是搜索文章时,返回的结果中与搜索关键词匹配度高的要靠前,更新时间近的文章也要靠前。lucene框架有一套完善的评分公式:

    coord(q,d) 评分因子,基于文档中出现查询项的个数。越多的查询项在一个文档中,说明文档的匹配程度越高。
    queryNorm(q)查询的标准查询
    tf(t in d) 指项t在文档d中出现的次数frequency。具体值为次数的开根号。
    idf(t) 反转文档频率, 出现项t的文档数docFreq
    t.getBoost 查询时候查询项加权
    norm(t,d) 长度相关的加权因子

 根据这个公式默认的排序就是 文档与搜索词匹配度越高,排序越靠前。要加入其他因素对排序影响,一般通过更改boost的值。Solr的edismax方式的bf查询配置就是更改boost值影响总体打分。

在solrconfig.xml中加入下面配置:

   <requestHandler name="/select" class="solr.SearchHandler">
		<lst name="defaults">
		<str name="defType">edismax</str>
		<str name="bf">
		recip(ms(NOW,publishTime),3.16e-11,1,1)
		</str>
		<str name="pf">
		</str>
		<str name="qf">
		</str>
		</lst>
  </requestHandler>

  bf中的公式就是1/(ms(NOW-updateTime)*3.16e-11)+1 ,ms()是两个时间的毫秒差(详见

http://wiki.apache.org/solr/FunctionQuery)。公式中:更新时间与now相差越大,分数越小;分数在0-1之内;最近的更新时间和最远的更新时间对分数影响斜度不会太大。

 

 

 

转载于:https://my.oschina.net/passerman/blog/710141

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值