Solr DisMax 分析

fieldOne^2.3 fieldTwo fieldThree^0.4,
最近有朋友用到solr dismax的功能,dismax 功能是solr提供在搜索时,可以对指定的field,query等设定权重,权重越大得分越高,说明越重要,结果拍在越前。

要用dismax,就必须启用,在solr1.3以后,solr的dismax功能通过 DisMaxQParserPlugin 来解析了。
我测试的版本是3.3,是通过在查询url里添加defType=dismax来启用dismax功能的。通过qt=dismax的话不会起作用的。
通过 defType=dismax 时,Solr 的QueryComponent组件的prepare的方法会取到defType参数的值,去创建对应的quey解析器。代码如下:

   //QueryParsing.DEFTYPE 的值为defType。
   String defType = params.get(QueryParsing.DEFTYPE,QParserPlugin.DEFAULT_QTYPE);
    if (rb.getQueryString() == null) {
      rb.setQueryString( params.get( CommonParams.Q ) );
    }
    try {
       //这里得到的是DisMaxQParserPlugin,对应的parse为DisMaxQParser
      QParser parser = QParser.getParser(rb.getQueryString(), defType, req);
      rb.setQuery( parser.getQuery() );
      rb.setSortSpec( parser.getSort(true) );
      rb.setQparser(parser);
所以从这可以看出dismax就是负责生成一个query。

下面讲下dismax的主要参数qf,因为其他的参数没有去分析。不能乱讲。

qf 

例如:qf=fieldOne^2.3 fieldTwo fieldThree^0.4,
qf 参数时指定solr从哪些field中搜索。像下面的话就只会在fieldOne,fieldTwo fieldThree这三个field中搜索。如果你还指定了q参数,比如q=“hadoop”,那么solr会认为是到 fieldOne,fieldTwo, fieldThree这三个field中搜索hadoop,这三个是并集的关系。生成的query为:fieldOne:hadoop^2.3 | fieldTwo:hadoop | fieldThree:hadoop^0.4 所以你定义了dismax的话,你的查询参数q就不要写成类似q=“title:hadoop”这样了。因为这样的话最终的查询 为:fieldOne:title:hadoop^2.3 | fieldTwo:title:hadoop | fieldThree:title:hadoop^0.4 除非你的这几个field里有“title:hadoop”这样的词存在,否则是查不到结果的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值