美文网首页
mysql 空间函数 vs ES GEO hash

mysql 空间函数 vs ES GEO hash

作者: 川流不息attitude | 来源:发表于2023-05-09 17:30 被阅读0次

mysql 空间函数 vs ES GEO hash

很多时候我们都可以看到 根据自己点位 查看门店到和自己最近的距离,这个时候 geo hash ,距离排序 就排上用处了。数据量小简单一点就 mysql ,数据量大推荐 就用 es.

mysql
SELECT st_distance_sphere(POINT(121.590347, 31.388094),POINT(longitude,latitude))/1000 AS distant,s.* FROM table_name s ORDER BY distant ;
es
   Pageable pageable = PageRequest.of(0, 10);
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("filmId", 1L);
        TermQueryBuilder termQuery = QueryBuilders.termQuery("date", "2023-03-24");
        // 以某点为中心,搜索指定范围
        Double latitude = new BigDecimal(30.58203).doubleValue();
        Double longitude = new BigDecimal(114.02919).doubleValue();
        GeoDistanceQueryBuilder distanceQueryBuilder = new GeoDistanceQueryBuilder("location");
        distanceQueryBuilder.point(latitude, longitude);
        boolQueryBuilder.must(termQueryBuilder);
        boolQueryBuilder.must(termQuery);
        String distance = "500000";
        // 定义查询单位:公里
        distanceQueryBuilder.distance(distance, DistanceUnit.KILOMETERS);
        boolQueryBuilder.filter(distanceQueryBuilder);

        // 按距离升序
        GeoDistanceSortBuilder distanceSortBuilder =
                new GeoDistanceSortBuilder("location", latitude, longitude);
        distanceSortBuilder.unit(DistanceUnit.KILOMETERS);
        distanceSortBuilder.order(SortOrder.ASC);

        NativeSearchQuery nativeSearchQuery = new NativeSearchQueryBuilder()
                .withQuery(boolQueryBuilder)
                .withPageable(pageable)
                .withSorts(distanceSortBuilder)
                .build();

        SearchHits<Class> page = elasticsearchRestTemplate.search(nativeSearchQuery, Class.class, IndexCoordinates.of("cinema"));

        page.forEach(emp -> {
            double dist = GeoDistance.ARC.calculate(latitude, longitude, emp.getContent().getLocation().getLat(),emp.getContent().getLocation().getLon(), DistanceUnit.KILOMETERS);
            log.info(emp+"; 距离我 : "+dist+"公里");
        });

总结:

用合适的技术 解决合适的问题,学会取舍 ,没有完美 只有适合。

相关文章

  • ElasticSearch技术资料

    ElasticSearch vs mysql mysql、es数据同步 ElasticSearch是一个分布式、可...

  • Geo Hash

    工作需要,实现了一下Geo Hash算法。尽量直接使用位操作,比网上常见的字符串判断位值得写法效率应该高一点。TO...

  • Golang标准库——hash

    hash hash包提供hash函数的接口。 type Hash Hash是一个被所有hash函数实现的公共接口。...

  • 哈希算法

    哈希算法 什么是hash函数?常见的hash算法hashlib的用法hash算法的用途 什么是hash函数? 哈希...

  • 一致性hash学习

    原理 hash值是个环形空间 hash算法 值域,32或64位 对象映射到hash空间 hash(object 1...

  • 一致性hash和LDC化

    一致性hash用在负载均衡或者路由selector上对请求key取hash值,自适应到hash空间上hash空间均...

  • 爬取NCBI中GEO中的数据

    获取GEO中GSE网页的信息 获取GEO中GSM的信息 汇总写成函数 获取附加材料文件

  • 应用类问题

    1. Hash算法 Hash函数是将输入键(key)转换为一个确定输出的函数。这个输出成为散列值。一个Hash函数...

  • hash函数

  • Hash函数

    摘要算法又称为哈希算法,散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符...

网友评论

      本文标题:mysql 空间函数 vs ES GEO hash

      本文链接:https://www.haomeiwen.com/subject/zxarsdtx.html