ElasticSearch之使用javaAPI来实现基于地理位置的搜索

目录

 

第一步:创建索引库并添加数据

第二步:添加以下jar包坐标依赖

第三步:使用javaAPI来实现基于地理位置的搜索


第一步:创建索引库并添加数据

直接在kibana当中通过以下操作创建索引库,并添加一条数据(暂略),添加数据(暂略);

第二步:添加以下jar包坐标依赖

暂略

第三步:使用javaAPI来实现基于地理位置的搜索

@Test
    public void locationQuery() throws UnknownHostException {
        //获取settings
        //配置es集群的名字
        Settings settings = Settings.builder().put("cluster.name", "myes").build();
        //获取client客户端
        TransportClient client = new PreBuiltTransportClient(settings).addTransportAddress
                (new TransportAddress(InetAddress.getByName("node01"), 9300));
        /**
         * 基于矩形范围的数据搜索
         *  40.0519526142,116.4178513254
         *  40.0385828363,116.4465266673
         */
        //构建查询提交
        SearchResponse searchResponse = client.prepareSearch("platform_foreign_website")
                .setTypes("store")
                .setQuery(QueryBuilders.geoBoundingBoxQuery("location")   //矩形
                        .setCorners(40.0519526142, 116.4178513254, 40.0385828363, 116.4465266673))
                .get();
        SearchHits searchHits = searchResponse.getHits();
        SearchHit[] hits = searchHits.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        System.out.println("====================================");

        /**
         *  找出坐落在多边形当中的坐标点
         *      40.0519526142,116.4178513254
         *      40.0385828363,116.4465266673
         *      40.0503813013,116.4562592119
         */
        List<GeoPoint> points = new ArrayList<>();
        points.add(new GeoPoint(40.0519526142,116.4178513254));
        points.add(new GeoPoint(40.0503813013, 116.4562592119));
        points.add(new GeoPoint(40.0385828363, 116.4465266673));

        SearchResponse searchResponse1 = client.prepareSearch("platform_foreign_website")
                .setTypes("store")
                .setQuery(QueryBuilders.geoPolygonQuery("location", points)).get();//多边形
        SearchHits searchHits1 = searchResponse1.getHits();
        SearchHit[] hits1 = searchHits1.getHits();
        for (SearchHit hit2 : hits1) {
            System.out.println(hit2.getSourceAsString());
        }

        System.out.println("======================================");


        /**
         * 以当前的点为中心,搜索落在半径范围内200公里的经纬度坐标点
         *40.0488115498,116.4320345091
         */
        SearchResponse searchResponse2 = client.prepareSearch("platform_foreign_website").setTypes("store")
                .setQuery(QueryBuilders.geoDistanceQuery("location") //半径
                        .point(40.0488115498, 116.4320345091)
                        .distance(200, DistanceUnit.KILOMETERS))
                .get();
        SearchHits searchHits2 = searchResponse2.getHits();
        SearchHit[] hits2 = searchHits2.getHits();
        for (SearchHit hit3 : hits2) {
            System.out.println(hit3.getSourceAsString());
        }
        client.close();
    }

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值