solr搜索结果按更新时间与关键字相关度排序
博客专区 > hxt168 的博客 > 博客详情
solr搜索结果按更新时间与关键字相关度排序
hxt168 发表于2年前
solr搜索结果按更新时间与关键字相关度排序
  • 发表于 2年前
  • 阅读 81
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 项目中用solr(lucene内核)来完成全文检索。项目中需求是搜索文章时,返回的结果中与搜索关键词匹配度高的要靠前,更新时间近的文章也要靠前。通过Solr的edismax方式的bf查询配置可以实现。

  项目中用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之内;最近的更新时间和最远的更新时间对分数影响斜度不会太大。

 

 

 

共有 人打赏支持
hxt168
粉丝 8
博文 14
码字总数 13288
作品 3
×
hxt168
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: