`

solr搜索打分规制排序

阅读更多

solr使用了Lucene的内核,也继承了Lucene的打分规则,关于Lucene打分规则可以参考如下博客

http://blog.chenlb.com/2009/08/lucene-scoring-architecture.html

Solr内改变打分规则有几种形式:

1.配置solr的solrconfig.xml中edismax,来改变Boost打分规则

2.在solr的schema中增加一个字段,该字段专门用于排序

3.自写一个solr的评分规则。

一般简单的应用1和2就能满足。

举一个例子,电商类网站(比如淘宝)的商品搜索:

1.在商品名称上出现搜索关键字排序靠前,而内容的次之

2.对多皇冠的买家排序靠前等

3.对近期发布的商品排序靠前

4.对最近销售多商品靠前

综上获得一个综合排名

在solrconfig.xml的SearchHandler中如下配置

 

Xml代码  收藏代码
  1. <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" >  
  2.     <lst name="defaults">  
  3.         <str name="echoParams">explicit</str>  
  4.         <str name="rows">10</str>  
  5.         <str name="hl">on</str>  
  6.         <str name="hl.fl">name,content</str>  
  7.         <str name="f.content.hl.fragsize">200</str>  
  8.         <str name="defType">edismax</str>  
  9.         <str name="bf">  
  10.             sum(recip(ms(NOW,pub_date),1,1,100),div(point,5632000),div(sale_count,1000000))  
  11.         </str>         
  12.         <str name="pf">  
  13.             content  
  14.         </str>         
  15.         <str name="qf">  
  16.             name^1.9   
  17.         </str>  
  18.     </lst>  
  19. </requestHandler>  
 bf用函数计算某个字段的权重,如上例子中pub_date发布日期的权重,point比如诚信指数,sale_count销售数量

bf内字段必须是索引的,bf的函数查看solr api文档 http://wiki.apache.org/solr/FunctionQuery

pf查询字段,这样在schema不用制定默认字段

qf对默认查询增加权重比值,比如标题是content的1.9倍,值越大权重越大

这样查询就会计算如下的一个综合评分值了

 

对于其他排序,比如说价格排序,在schema增加price字段,然后查询是增加sort=price desc就可以了

分享到:
评论
4 楼 zyhui98 2012-11-07  
你做了高亮嘛
3 楼 zyhui98 2012-10-30  
嗯,1.4的不支持edismax,不知道把jar包直接包含进来行不行,我用的庖丁解牛分词,字段权重我已经通过代码的方式修改好了,就是那个bf函数的还在想办法。

我做的功能要有多个字段,比如上面就是查询name和content,如果有个条件age等于固定一个值,似乎不好弄了,配置的东西不好调试啊。
2 楼 a52071453 2012-10-30  
http://blog.sina.com.cn/s/blog_64d0b03c0101aoqz.html
zyhui98 写道
你是转载的嘛,
http://blog.sina.com.cn/s/blog_64d0b03c0101aoqz.html
,我安装你说的提示错误的,solr1.4没有edismax。

我选择dismax不报错了,但是查不到数据。

是的 我要要做这个部分 还没开始做 感觉问题应该不大 我用的SOLR3.6的
1 楼 zyhui98 2012-10-28  
你是转载的嘛,
http://blog.sina.com.cn/s/blog_64d0b03c0101aoqz.html
,我安装你说的提示错误的,solr1.4没有edismax。

我选择dismax不报错了,但是查不到数据。

相关推荐

Global site tag (gtag.js) - Google Analytics