solr实现竞价排行
2020-10-30 本文已影响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中查询语句