@Overridepublic Listsearch(BigDecimal longitude, BigDecimal latitude, String keyword,Integer orderby,Integer categoryId,String tags) {
List shopModelList =shopModelMapper.search(longitude,latitude,keyword,orderby,categoryId,tags);
shopModelList.forEach(
shopModel->{
shopModel.setSellerModel(sellerService.get(shopModel.getSellerId()));
shopModel.setCategoryModel(categoryService.get(shopModel.getCategoryId()));
}
);returnshopModelList;
}
@Overridepublic Map searchES(BigDecimal longitude, BigDecimal latitude, String keyword, Integer orderby, Integer categoryId, String tags) throwsIOException {
Map result = new HashMap();//SearchRequest searchRequest = new SearchRequest("shop");//SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();//
//List shopIdsList = new ArrayList<>();//sourceBuilder.query(QueryBuilders.matchQuery("name",keyword));//sourceBuilder.timeout(new TimeValue(60,TimeUnit.SECONDS));//searchRequest.source(sourceBuilder);//
//SearchResponse searchResponse = highLevelClient.search(searchRequest, RequestOptions.DEFAULT);//SearchHit[] hits = searchResponse.getHits().getHits();//for(SearchHit hit : hits)//{//shopIdsList.add(new Integer(hit.getSourceAsMap().get("id").toString()));//}
Request request = new Request("GET","/shop/_search");
String reqJson=
"{\n" +
" \"_source\": \"*\", \n" +
" \"script_fields\": {\n" +
" \"distance\":{\n" +
" \"script\":{\n" +
" \"source\":\"haversin(lat,lon,doc[‘location‘].lat,doc[‘location‘].lon)\",\n" +
" \"lang\":\"expression\",\n" +
" \"params\":{\"lat\":" + latitude.toString() + ",\"lon\":" + longitude.toString() + "}\n" +
" \n" +
" }\n" +
" }\n" +
" },\n" +
" \"query\": {\n" +
" \"function_score\": {\n" +
" \"query\": {\n" +
" \"bool\": {\n" +
" \"must\": [\n" +
" {\"match\": {\"name\": {\"query\": \"" + keyword + "\",\"boost\": 0.1}}},\n" +
" {\"term\": {\"seller_disabled_flag\": 0}}\n" +
" ]}},\n" +
" \"functions\": [\n" +
" {\n" +
" \"gauss\": {\n" +
" \"location\": {\n" +
" \"origin\": \"" + latitude.toString() + "," + longitude.toString() + "\",\n" +
" \"scale\": \"100km\",\n" +
" \"offset\": \"0km\",\n" +
" \"decay\": 0.5\n" +
" }\n" +
" },\n" +
" \"weight\": 9\n" +
" },\n" +
" {\n" +
" \"field_value_factor\": {\n" +
" \"field\": \"remark_score\"\n" +
" },\n" +
" \"weight\": 0.2\n" +
" },\n" +
" {\n" +
" \"field_value_factor\": {\n" +
" \"field\": \"seller_remark_score\"\n" +
" },\n" +
" \"weight\": 0.1\n" +
" }\n" +
" ],\n" +
" \"score_mode\": \"sum\",\n" +
" \"boost_mode\": \"replace\"\n" +
" }\n" +
" }\n" +
" , \"sort\": [\n" +
" {\n" +
" \"_score\": {\n" +
" \"order\": \"desc\"\n" +
" }\n" +
" }\n" +
" ]\n" +
" \n" +
" \n" +
"}";
System.out.println(reqJson);
System.out.println("===========================================================");
request.setJsonEntity(reqJson);
Response response=highLevelClient.getLowLevelClient().performRequest(request);
String responseStr=EntityUtils.toString(response.getEntity());
System.out.println(responseStr);
JSONObject jsonObject=JSONObject.parseObject(responseStr);
JSONArray jsonArray= jsonObject.getJSONObject("hits").getJSONArray("hits");
List shopModelList = new ArrayList<>();for(int i = 0;i
{
JSONObject jsonObj=jsonArray.getJSONObject(i);
Integer id= new Integer(jsonObj.get("_id").toString());//jsonObj.getJSONObject("fields").getJSONArray("distance").get(0);
BigDecimal distance = new BigDecimal(jsonObj.getJSONObject("fields")
.getJSONArray("distance").get(0).toString());
ShopModel shopModel=get(id);//shopModel.setDistance(distance.setScale(0,BigDecimal.ROUND_CEILING).intValue() * 1000);
shopModel.setDistance(distance.multiply(new BigDecimal(1000).setScale(0,BigDecimal.ROUND_CEILING)).intValue());
shopModelList.add(shopModel);
}//List shopModelList = shopIdsList.stream().map(//id -> {//return get(id);//}//).collect(Collectors.toList());
result.put("shop",shopModelList);returnresult;
}