附近查询

  1. @SpringBootTest
  2. public class MyTest{
  3. //注入RestHighLevelClient对象
  4. @Autowired
  5. private RestHighLevelClient restHighLevelClient;
  6. @Test
  7. public void test() throws IOException {
  8. //准备SearchRequest请求对象,并指定索引库名
  9. SearchRequest searchRequest = new SearchRequest(索引库名);
  10. //准备MatchAllQueryBuilder查询对象
  11. MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
  12. //在SearchRequest请求对象中放入MatchAllQueryBuilder查询对象
  13. searchRequest.source().query(matchAllQueryBuilder);
  14. //根据距离进行排序
  15. searchRequest.source().sort(
  16. SortBuilders.geoDistanceSort(地理坐标字段名, new GeoPoint(纬度, 经度)
  17. )
  18. .order(SortOrder.ASC)
  19. .unit(DistanceUnit.KILOMETERS) //指定距离单位
  20. );
  21. //发送请求,得到响应对象
  22. SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
  23. //从响应对象中获取响应结果
  24. SearchHits searchHits = searchResponse.getHits();
  25. //获取文档的总条数
  26. long total = searchHits.getTotalHits().value;
  27. //获取搜索结果数组
  28. SearchHit[] hits = searchHits.getHits();
  29. //创建文档集合,用于存放结果
  30. List<文档类名> 集合对象名 = new ArrayList<>();
  31. //遍历数组
  32. for (SearchHit hit : hits) {
  33. //获取Json格式的文档内容
  34. String json = hit.getSourceAsString();
  35. //反序列化Json,这里需要引入fastjson的依赖
  36. 文档类名 文档对象名 = JSON.parseObject(json, 文档类名.class);
  37. //获取排序值,即获取距离信息
  38. Object[] sortValues = hit.getSortValues();
  39. if (sortValues.length > 0) {
  40. Object sortValue = sortValues[0];
  41. //将距离信息放入文档对象中
  42. 文档对象名.set距离(sortValue.toString() + 距离单位);
  43. }
  44. //将结果放入集合
  45. 集合对象名.add(文档对象名);
  46. }
  47. }
  48. }