solr权重

Solr权重

在我们使用solr进行搜索的时候,搜索结果是按照什么规则而展示出来的,我们都知道solr是使用分词器进行分词的,每一次进行搜索或者是导入数据的时候都会触发这个分词器,评分高的就会在越前面,那么solr是如何进行评分的呢?下面我们就来说一下solr权重。

solr如何控制评分

solr使用了Lucene的内核,同时也继承了Lucene的打分规则。
下面我们来说一下solr内改变打分规则的几种方法:
1.配置solr的solrconfig.xml中的edismax,来改变Boost打分规则(推荐);
2. 在solr中的schema中增加一个字段,该字段专门用于排序(推荐);
3. 自写一个solr的评分规则;

edismax的理念:

edismax中将查询字段和查询词项分开了,如我们在标准用法中使用name:zjf,那么在edismax中,需要在qf中设置查询字段为name,然后在q中输入zjf,注意这里不能加name了,否则没有结果。

这样设计的结果就是,查询词项会去所有的qf列(query field,可以设置多列,也可以配置为每列配置权重)上进行查询,如果要针对每个字段有不同的查询,如name:zjf,age:30,那么需要将其中一个移入到fq中,但是注意,fq中的查询是不影响评分的。这也是edismax的理念。满足常用的搜索场景。

edismax的常用参数

q和fq来自标准查询,也经常使用。

edismax扩展的有:

qf:query field。q中的词项要在哪些字段上执行查询。可以设置多列以及每一列的权重。如果没有设置,那么将会使用df默认字段(一般在配置文件中配置好)。

pf:parse field。pf和qf的格式一样。区别是pf会更加注重短语匹配,也就是说如果输入zjf xhj作为查询,那么在配置了pf的字段上,zjf随后出现xhj的文档的评分更高。注意这里只是评分更高,如果想获得更加严格的短语匹配,应该在查询中使用"zjf xhj"。

ps:用于配置pf中的词项的短语间隔。可以控制zjf和xhj之间多少个间隔。

bq:接受一个和q一样的查询,它和q的区别是不影响返回的结果集,只会影响排名。

bf:提升函数,通过数学公式来影响评分,而且不局限在qf中的字段。

mm:最小匹配,如果我们不严格要求AND,可以配置mm来定义查询结果集的匹配程度。

注意:想pf 和qf这种需要查询的字段上,一定要是indexed的。

举一个栗子:电商类网站(京东)的商品搜索:
1.在商品名称上出现搜索关键字排序靠前,而内容次之
2.对近期发布的商品排序靠前
3.对最近销售多的商品靠前
综上所述获得一个综合排名

在知道edismax的理念后让我们来看在solrconfig.xml的SeacrchHandler中的配置:

在这里插入图片描述
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就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值