• 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个 
  • 相关阅读:
    react className 有多个值时的处理 / react 样式使用 百分比(%) 报错
    更改 vux Tabbar TabbarItem标题下方的文字激活时的颜色
    angular 图片加载失败 情况处理? 如何在ionic中加载本地图片 ?
    angular 资源路径问题
    webpack 项目实战
    百度地图 创建 自定义控件(vue)
    function 之 arguments 、call 、apply
    手写 redux 和 react-redux
    ARC以及MRC中setter方法的差异
    运行时中给一个对象绑定另外一个对象
  • 原文地址:https://www.cnblogs.com/liang1101/p/6263162.html
Copyright © 2020-2023  润新知