Solr的DisMaxQParserPlugin排序及使用自定义的requestHandle

DisMaxQParserPlugin提供在针对文本boost打分上,支持搜索多个schema索引字段,并针对每一个字段设置不同的boost权限。
pf查询 与 qf查询
pf: 可提供对一条记录的多个字段做匹配的功能
qf: 针对查询的每个字段设置不同的boost权重打分,其设置的字段必须为在pf中配置的项。
可在solrconfig.xml中的browse中配置做如下配置:
<requestHandler name="/browse" class="solr.SearchHandler">
    <lst name="defaults">
        <str name="defType">edismax</str>
        <str name="pf">    name info title    </str>
        <str name="qf">
            name^1 info^0.8 title^0.6
        </str>
    </lst>
</requestHandler> 
上面一段的意思是,查询name,info,title三个字段,每个字段的文本相关度打分权重分别为1,0.8,0.6。计算查询出的每一条结果的权重方法如下:分别计算各字段的文本打分然后乘于配置的权重,最后三者相加即为该结果的boost得分。


bf查询
除去pf查询,qf查询之外,仍然希望索引记录的其它字段能够计入打分中,这时可以使用bf查询。bf查询支持一些数据函数,这些函数可作用在索引记录的字段上,多为时间,数值等字段。同样bf也支持添加权重。下面是一个使用bf查询配置的例子:
<requestHandler name="/browse" class="solr.SearchHandler">
    <lst name="defaults">
        <str name="defType">edismax</str>
        <str name="bf">
            sum(recip(ms(NOW,created_time),3.16e-11,1,1),sqrt(log(max(sales,1))),sqrt(log(count)))^10
        </str>
        <str name="pf">
            name info title
        </str>
        <str name="qf">
            name^1 info^0.8 title^0.6
        </str>
    </lst>
</requestHandler>
其中sum,recip,ms,sqrt,log,max这些都是Solr提供的数学方法,支持的所有数学方法可在这里查找到:http://wiki.apache.org/solr/FunctionQuery

edismax相关资源:http://wiki.apache.org/solr/DisMaxQParserPlugin

以下是在添加数据的时候对每个文档的Boost进行修改,来影响打分,默认值为1,也可以在update时进行添加。

List<SolrInputDocument> docList = newArrayList<SolrInputDocument>();
for(ShopDataModel shopDataModel : indexDataBeanList) {
    SolrInputDocument doc = newSolrInputDocument();
    doc.setDocumentBoost(shopDataModel.getCoojin_fee());//核心代码,shopDataModel.getCoojin_fee()为放大倍数,此处为float类型
    docList.add(doc);
}
CommonsHttpSolrServer solr = getSolrWriteConnection();
solr.add(docList);
solr.commit();
此处不进行optimize操作,因为Solr中配置有自动合并。

使用自定义的requestHandel

寻找name属性跟请求中的qt参数匹配的handler
寻找在配置文件中“default=true”的handler
寻找在配置文件中name属性为“standad”的handler
qt – (query type)指定那个类型来处理查询请求,一般不用指定,默认是standard。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值