Solr评分修改

最近要提供一个地点查找的API给IOS组调用,其主要需求是通过距离,星级和地标的星级三者排序,距离越短和星级越高的地点优先显示

关于距离排序可以看这篇文章:

要是实现方式还是Solr wiki中提供的如下方法来实现的

:8983/solr/select?q={!boost b=recip(ms(NOW,manufacturedate_dt),3.16e-11,1,1)}ipod或者:8983/solr/select?q={!boost b=$dateboost v=$qq}&dateboost=recip(ms(NOW,manufacturedate_dt),3.16e-11,1,1)&qq=ipod

根据我的需求可改成:

:8983/solr/select?q={!boost b=$dateboost v=$qq}&dateboost=sum(div(landmarkRank,10),div(star,10),recip(geodist(),1,10,10))&qq=ipod&fl=*,score

此时会看到评分会改变。

此需求的实现代码如下:

public TownFileLocalSearchResult searchNearByTownfile(double lat, double lng, double distance,long start, int rows, String type, String keyword, long parentId) throws APIException,APIRemoteException {TownFileLocalSearchResult result = new TownFileLocalSearchResult();SolrServer solrServer = this.getSolrServer();Map<String,String> params = new HashMap<String,String>();params.put("fq", "{!geofilt}");//距离过滤函数params.put("pt", getLatLng(lat, lng));//当前经纬度params.put("sfield", "latlng");//经纬度的字段params.put("d", String.valueOf(distance));//就近多少公里的所有用户 params.put("start", String.valueOf(start));//记录开始位置params.put("rows", String.valueOf(rows));//查询的行数params.put("fl", "*,score");params.put("q", "{!boost b=$dateboost v=$key}");if(StringUtils.isEmpty(keyword)){params.put("key", "*:*");}else{params.put("key", "*"+keyword+"*");}if(type.equals("landmark")){params.put("key", (params.get("q").equals("*:*") ? "" : params.get("key")+SOLR_AND)+"landmarkRank:[1 TO 9]");params.put("dateboost", "sum(div(landmarkRank,10),recip(geodist(),1,10,10))");}else{if(type.equals("periphery")){params.put("key", (params.get("q").equals("*:*") ? "" : params.get("key")+SOLR_AND)+"-landmarkRank:[1 TO 9]");params.put("dateboost", "sum(div(star,10),recip(geodist(),1,10,10))");}else{params.put("dateboost", "sum(div(landmarkRank,10),div(star,10),recip(geodist(),1,10,10))");}if(parentId != 0){params.put("key", (params.get("key").equals("*:*") ? "" : params.get("key")+SOLR_AND)+"parentId:"+parentId);}//params.put("sort", "geodist() asc");//根据距离排序}params.put("sort", "score desc");QueryResponse queryResponse = null;try {System.out.println(new MapSolrParams(params).toString());queryResponse = solrServer.query(new MapSolrParams(params), METHOD.POST);} catch (SolrServerException e) {logger.error("—————Get QueryResponse SolrServerException:\t" + e.getMessage(), e);}if (null != queryResponse) {result.setTownFileLocalRecords(queryResponse.getBeans(TownFileLocalRecord.class));int count = Integer.valueOf(String.valueOf(queryResponse.getResults().getNumFound()));result.setTotalCount(count);}return result;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

,背起简单的行攘,沐浴自由的风。

Solr评分修改

相关文章:

你感兴趣的文章:

标签云: