zoukankan      html  css  js  c++  java
  • Solr权重设置

    目前影响solr查询返回结果默认是采用score进行排序的,如何影响文章静态score权重值,主要有三种方案:

    1. 通过solrConfig.xml进行指定配置

    <requestHandler name="select" class="solr.SearchHandler" default="true">
        <!– default values for query parameters can be specified, these
             will be overridden by parameters in the request–>
         <lst name="defaults">
            <str name="echoParams">explicit</str>
            <int name="rows">10</int>
            <bool name="hl">true</bool> 
            <str name="hl.fl">title,content</str>  
           <str name="f.content.hl.fragsize">200</str>
           <str name="mlt.qf">
               id^10.0 title^10.0 content^1.0
            </str>
         </lst>
    </requestHandler>

    2. 通过SolrJ在索引阶段赋值静态权重

      对文档某个字段指定相应的权重,其中attrName为属性名称,attr为具体的内容,5.0f为对应指定的权重值(默认为1分)

      doc.setField(attrName, attr.trim(), 5.0f);

      对整个文档赋boost值

      doc.setDocumentBoost(1.5f);

    3. 通过SolrJ在搜索阶段赋权重查询

      今天我讲的是第二种方式,虽然第一种方式也可以实现权重指定,但是是写死的不能进行动态化的调整,而且solrConfig.xml文件为solr最底层配置文件,如果已经大规模使用的话再想修改就不是那么简单的事情了(严重导致集群发生STW即Stop The World),所以推荐第二种方式实现,索引数据这里就不多余介绍了,到这一步的话前面的应该都不是问题了,那么我直接上代码来介绍如何通过代码指定对应属性的权重:

     1 SolrQuery query = new SolrQuery("*:*"); 
     2 query.set("df", "title");
     3 query.set("defType","dismax");  
     4 query.set("qf","title^1 price^0.1");//这里必须包含查询条件title
     5 query.set("bf", "sum(abs(price))");
     6 query.setParam("q.op", "AND");
     7 query.addSort("pubTime", ORDER.desc);  
     8 query.setStart(0);
     9 query.setRows(10);
    10 QueryResponse queryReponse;  
    11 try {  
    12     SolrInputDocument doc = new SolrInputDocument();   
    13     queryReponse = solrServer.query(sq);  
    14     SolrDocumentList doclist=sr.getResults();   
    15      //计数器  
    16      int i=0;  
    17     for (SolrDocument solrDocument : doclist) {
    18         System.out.println("标题:"+solrDocument.get("title")+"\n\n");  
    19          ++i;  
    20     }  
    21     System.out.println(i+"个");  
    22 } catch (SolrServerException e) {  
    23     e.printStackTrace();  
    24 }  

      以下是没有权重排序的结果:

    标题:一0  
    标题:一1  
    标题:一2  
    标题:一3  
    标题:一4  
    5个

      以下是引入权重排序结果:

    标题:一4  
    标题:一3  
    标题:一2  
    标题:一1  
    标题:一0  
    5个 
  • 相关阅读:
    Linux_进程之间的通信
    Linux_控制作业(管理)
    Linux_进程管理相关命令
    Linux_进程管理的基本概述
    文本编辑_Vim&Vi
    Linux_权限管理理论概述
    Linux_用户和组管理
    Linux_ACL文件访问控制列表
    72. VUE axios 配置信息相关
    71. VUE axios 发送并发请求(多个)
  • 原文地址:https://www.cnblogs.com/liang1101/p/6263162.html
Copyright © 2011-2022 走看看