solr查询地理位置

List<StoreSearchVO> queryStoreVO;
SolrQuery query = new SolrQuery();
query.setStart((params.getPageNo() - 1) * params.getPageSize());
query.setRows(params.getPageSize());
//搜索词
Matcher m = numRegExp.matcher(params.getPoiName());
if (m.matches()) {
    query.setQuery("storeName:(*" + params.getPoiName() + "*) OR storeId:(*" + params.getPoiName() + "*)");
} else {
    query.setQuery("storeName:(" + params.getPoiName() + ")");
}
query.addFilterQuery("regions:" + params.getRegionCode());
query.addFilterQuery("{!geofilt}");
//当前经纬度
query.add("pt", params.getLatitude() + "," + params.getLongitude());
//就近 20 km 的所有数据
query.add("d", "20000");
//经纬度字段
query.add("sfield", "latLon");
//指定返回的列
query.addField("storeId,storeName,distance:geodist()");

query.addSort("score", SolrQuery.ORDER.desc);
query.addSort("geodist()", SolrQuery.ORDER.asc);
QueryResponse queryResponse = this.solrClient.query(query, SolrRequest.METHOD.POST);
SolrDocumentList documentList = queryResponse.getResults();
queryStoreVO = documentList.stream().map(document -> {
    StoreSearchVO storeVO = new StoreSearchVO();
    storeVO.setStoreId(document.getFieldValue("storeId") == null ? "" : document.getFieldValue("storeId").toString());
    storeVO.setOrgName(document.getFieldValue("storeName") == null ? "" : document.getFieldValue("storeName").toString());
    storeVO.setDistance(document.getFieldValue("distance") == null ? BigDecimal.ZERO : new BigDecimal(document.getFieldValue("distance").toString()));
    return storeVO;
}).collect(Collectors.toList());

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值