elasticsearch6.3.2学习记录三 《geo 地理位置空间查询》

博客主要涉及两方面内容,一是查询多边形的地理位置范围,二是参考Elasticsearch Java API的使用进行多条件查询,聚焦于信息技术领域的数据查询相关操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、查询多边形的地理位置范围


public String ploygeoSearch(@RequestBody Object json) {
        TransportClient client;
        try {
            /**List list = JSONObject.fromObject(json).getJSONArray("list");
            String keyword = JSONObject.fromObject(json).getString("keyVal");
            //指定一个区域,由三个或以上坐标点组成
            List<GeoPoint> points = new ArrayList<>();
            for (int i=0;i<list.size();i++){
                String pointStr = list.get(i).toString();
                String wkt = pointStr.substring(1,pointStr.length()-1);
                String[] point = wkt.split(",");
                double lat = Double.parseDouble(point[0])/1000.0;
                double lon = Double.parseDouble(point[1])/1000.0;
                if (lat>90) lat=90.000000;
                if (lat<-90) lat = -90.000000;
                if (lon>180) lon = 180.000000;
                if (lon<-180) lon = -180.000000;
                points.add(new GeoPoint(lat, lon));
            }**/
            List<GeoPoint> points = new ArrayList<>();//纬度,经度
            points.add(new GeoPoint(21.01, 23.10));//纬度,经度
            points.add(new GeoPoint(25.01, 53.10));
            points.add(new GeoPoint(41.01, 43.10));


 GeoPolygonQueryBuilder gpqb = QueryBuilders.geoPolygonQuery("pin.location", points);
            //多条件设置
            QueryBuilder queryBuilder = null;
            MatchPhraseQueryBuilder mpqb = null;


            if (!"".equals(keyword)){
                mpqb = QueryBuilders.matchPhraseQuery("DISTRICT",keyword);
                queryBuilder = QueryBuilders.boolQuery()
                        .must(mpqb)
                        .must(gpqb);
            }else {//如果没有输入关键字 只进行区域范围查询 
                queryBuilder = QueryBuilders.boolQuery()
                        .must(gpqb);
            }

            client = EsUtil.getClient();
            SearchResponse searchResponse = client.prepareSearch(indexName)
                    .setTypes(indexType)
                    .setSize(Integer.parseInt(searchSize))
                    .setQuery(queryBuilder)
                    .get();
            long totalHits = searchResponse.getHits().totalHits;//命中个数
            SearchHit[] searchHits = searchResponse.getHits().getHits(); //执行检索
            //返回结果
            List result = new ArrayList();
            for (int i = 0; i < searchHits.length; i++) {
                result.add(JSONObject.fromObject(searchHits[i].getSourceAsString()));
            }
            return result.toString();
        }catch (Exception e){
            e.printStackTrace();
            return "检索失败";
        }
    }






/**
     * 获取客户端
     * @return
     */
    public static TransportClient getClient() {
        try {
            TransportClient client;
            Settings esSettings = Settings.builder()
                    .put("cluster.name", "elasticsearch") //设置ES实例的名称
                    .put("client.transport.sniff", true) //自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中
                    .put("client.transport.ignore_cluster_name", true)  //如果集群名不对,也能连接
                    .build();
            client = new PreBuiltTransportClient(esSettings);//初始化client较老版本发生了变化,此方法有几个重载方法,初始化插件等。
            //此步骤添加IP,至少一个,其实一个就够了,因为添加了自动嗅探配置
            client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
            return client;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

二、参考 Elasticsearch Java API 的使用(7)—多条件查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值