美文网首页
solr实现竞价排行

solr实现竞价排行

作者: 传达室马大爷 | 来源:发表于2020-10-30 15:16 被阅读0次

    需求背景

    有时候我们查询一个分页数据列表时,往往需要根据特定的查询条件将部分数据置顶

    举例

    查询一个带分页的活动车系列列表接口,需要按照用户画像车系置顶推荐三个车系
    第一页:S1、S2、S3、S4、S5、S6、S7、S8、S9、S10
    第二页:S11、S12、S13、S14、S15、S16、S17、S18、S19、S20
    用户画像车系为S14、S10、S18,现在需要将S14、S10、S18置顶,提高优先级
    第一页:S14、S10、S18、S1、S2、S3、S4、S5、S6、S7
    第二页:S8、S9、S11、S12、S13、S15、S16、S17、S19、S20

    实现方式

    solrconfig.xml添加elevator

    <searchComponent name="elevator" class="solr.QueryElevationComponent">
        <str name="queryFieldType">string</str>
        <str name="config-file">elevator.xml</str>
      </searchComponent>
    
      <requestHandler name="/elevate" class="solr.SearchHandler">
        <lst name="defaults">
        </lst>
        <arr name="last-components">
          <str>elevator</str>
        </arr>
      </requestHandler>
    

    创建elevator.xml文件,由于一般都是从solr中查询出需要置顶的索引id,动态查询,所以我这边elevator.xml设置为null

    <elevate>
    </elevate>
    

    配置完成后重启服务(注:主从文件都要修改),这样solr服务就支持/elevate查询

    具体使用

    • 首先我们需要根据需求把用户画像车系对应solr的主键id查出来,用英文逗号连接(elevateIds = S14,S10,S18)
    • 查询solr时用/elevator
    solrQuery.set("qt", "/elevate");
    
    SolrQuery solrQuery = new SolrQuery(SolrConst.Q_DEFALUT_VALUE);
    // 将查出来的elevateIds传入参数并开启
    solrQuery.setParam("elevateIds", elevateIds)
                        .setParam("forceElevation", "on");
    
    • solr中查询语句

    http://127.0.0.1:9090/solr/test/elevate?q=%3A&group=true&group.field=SeriesId&group.limit=1&group.sort=VersionSort+DESC%2Crand_39861+ASC&group.ngroups=true&elevateIds=152137_110100_3248%2C152229_110100_692%2C152368_110100_3158&forceElevation=on&fl=SeriesId%2CActivityId&fq=CityId%3A110100+AND+SubjectId%3A82&start=0&rows=6&sort=HistorySeriesLeadsCount+desc&qt=%2Felevate

    相关文章

      网友评论

          本文标题:solr实现竞价排行

          本文链接:https://www.haomeiwen.com/subject/ewddvktx.html