首页 > 其他分享 >ElasticSearch 实现分词全文检索 - 经纬度商家定位查询

ElasticSearch 实现分词全文检索 - 经纬度商家定位查询

时间:2023-03-21 12:44:08浏览次数:49  
标签:map lon 全文检索 ElasticSearch location 分词

目录

ElasticSearch 实现分词全文检索 - 概述
ElasticSearch 实现分词全文检索 - ES、Kibana、IK安装
ElasticSearch 实现分词全文检索 - Restful基本操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 索引操作
ElasticSearch 实现分词全文检索 - Java SpringBoot ES 文档操作
ElasticSearch 实现分词全文检索 - 测试数据准备
ElasticSearch 实现分词全文检索 - term、terms查询
ElasticSearch 实现分词全文检索 - match、match_all、multimatch查询
ElasticSearch 实现分词全文检索 - id、ids、prefix、fuzzy、wildcard、range、regexp 查询
ElasticSearch 实现分词全文检索 - Scroll 深分页
ElasticSearch 实现分词全文检索 - delete-by-query
ElasticSearch 实现分词全文检索 - 复合查询
ElasticSearch 实现分词全文检索 - filter查询
ElasticSearch 实现分词全文检索 - 高亮查询
ElasticSearch 实现分词全文检索 - 聚合查询 cardinality
ElasticSearch 实现分词全文检索 - 经纬度查询
ElasticSearch 实现分词全文检索 - 搜素关键字自动补全(suggest) 以下待发布
ElasticSearch 实现分词全文检索 - SpringBoot 完整实现 Demo 附源码

地图经纬度搜索

ES 中提供了一个数据类型 geo_point, 用来存储经纬度

创建ES索引

# 创建一个索引,指定 name,location
PUT /map
{
  "settings": {
    "number_of_shards": 2,
    "number_of_replicas": 1
  },
  "mappings": { 
    "properties":{
      "name":{
        "type":"text"
      },
      "location":{
        "type":"geo_point"
      }
    } 
  }
}

百度地图经纬度:http://api.map.baidu.com/lbsapi/getpoint/index.html

添加数据

# 添加数据
PUT /map/_doc/1
{
  "name":"天安门",
  "location":{
    "lon":116.403119,
    "lat":39.915599
  }
}

PUT /map/_doc/2
{
  "name":"北京大学",
  "location":{
    "lon":116.316486,
    "lat":39.999416
  }
}

PUT /map/_doc/3
{
  "name":"清华大学",
  "location":{
    "lon":116.333267,
    "lat":40.010276
  }
}

ES地图搜索方式

  • geo_distance: 直线距离检索方式
    image
  • geo_bound_box:以两个点确定一个巨型,获取在矩形内的全部数据
    image
  • geo_polygon:以多个点,确定一个多边形,获取多边形内的全部数据
    image

实现地图检索

# 直接距离
POST /map/_search
{ 
  "query":{
    "geo_distance":{
      "location":{     #确定一个点
        "lon":116.433589,
        "lat":39.909235
      },
      "distance":3000,  # 2000 查不到,当前定位中,3公里内维护的数据(类似外卖)
      "distance_type":"arc"   # 指定形状为圆形,直接距离
    }
  }
}

# 左上、右下,确定巨型范围
POST /map/_search
{ 
  "query":{
    "geo_bounding_box":{
      "location":{
        "top_left":{       # 圆明园
          "lon":116.309695,
          "lat":40.013094
        },
        "bottom_right":{    # 天安门
          "lon":116.403119,
          "lat":39.915599
        }
      }
    }
  }
}

# 多点确定范围
POST /map/_search
{
  "query":{
    "geo_polygon":{
      "location":{
        "points":[
          { 
            "lon":116.31027,
            "lat":40.013315
          },
          { 
            "lon":116.335854,
            "lat":39.998282
          },{ 
            "lon":116.301359,
            "lat":39.992534
          }
        ]
      }
    }
  }
}

Java

@Test
void geoPolygon() throws Exception {
    String indexName = "map";
    RestHighLevelClient client = ESClient.getClient();

    //1. 创建SearchRequest对象
    SearchRequest request = new SearchRequest(indexName);

    //2. 指定查询条件
    List<GeoPoint> points = new ArrayList<>();
    points.add(new GeoPoint(40.013315, 116.31027));
    points.add(new GeoPoint( 39.998282,116.335854));
    points.add(new GeoPoint( 39.992534,116.301359));

    SearchSourceBuilder builder = new SearchSourceBuilder();
    builder.query(QueryBuilders.geoPolygonQuery("location", points));
    request.source(builder);

    //3. 执行查询
    SearchResponse resp = client.search(request, RequestOptions.DEFAULT);

    //4. 输出返回值
    for (SearchHit hit : resp.getHits().getHits()) {
        System.out.println(hit.getSourceAsMap());
    }
}

标签:map,lon,全文检索,ElasticSearch,location,分词
From: https://www.cnblogs.com/vipsoft/p/17171683.html

相关文章

  • 基于Kafka和Elasticsearch构建实时站内搜索功能的实践
    作者:京东物流纪卓志目前我们在构建一个多租户多产品类网站,为了让用户更好的找到他们所需要的产品,我们需要构建站内搜索功能,并且它应该是实时更新的。本文将会讨论构建这......
  • Elasticsearch 集群规划- 单台机器核心数计算公式
    在做集群规划的时候,到底需要给集群的每个节点多少个核心数?这个问题一直困扰了我很久。最近一段时间做千亿数据,PB存储量集群规划的时候,突然想明白了这件事,大致可以用一个......
  • ElasticSearch 实现分词全文检索 - 高亮查询
    目录ElasticSearch实现分词全文检索-概述ElasticSearch实现分词全文检索-ES、Kibana、IK安装ElasticSearch实现分词全文检索-Restful基本操作ElasticSearch......
  • 分布式搜索-elasticsearch
    学习黑马-SpringCloud微服务技术栈项目的分布式搜索章节自行整理的笔记,方便日后的重构。项目涉及技术知识点是按照集数依次整理,方便日后回来查找。考虑到不是固定的联......
  • elasticsearch添加拼音分词搜索
    分词器是es当中的一个组件,通俗来讲,就是将搜索的条件按照语义进行拆分,分词为多个词语,es会讲text格式的字段按照分词器的结果进行分词,并编排成倒排索引,正因为如此,es的查询速......
  • elastic search ik分词器安装
    目录elasticsearchik分词器安装ik安装下载地址安装ik分词器elasticsearchik分词器安装ik安装下载地址下载ES版本对应的分词器即可https://github.com/medcl/elast......
  • elasticsearch 安装常见报错
    目录elasticsearch安装常见报错报错信息问题解决系统安装场景下解决docker-compose安装场景下解决elasticsearch安装常见报错报错信息memorylockingrequestedfore......
  • ElasticSearch 实现分词全文检索 - filter查询
    目录ElasticSearch实现分词全文检索-概述ElasticSearch实现分词全文检索-ES、Kibana、IK安装ElasticSearch实现分词全文检索-Restful基本操作ElasticSearch......
  • Springboot 整合 elasticsearch 8.x版本冲突
    Springboot整合elasticsearch版本冲突Springboot整合elasticsearchmaven依赖应与elasticsearch服务端版本一致java.lang.IllegalStateException:Failedtoloa......
  • elasticsearch设置/修改密码
    elasticsearch设置密码1.进入到lelasticsearch目录下的config目录,找到elasticsearch.yml文件,在里面添加如下命令并重启:xpack.security.enabled:truexpack.license.sel......