ElasticSearch查询笔记目录

  涉及的常用查询内容较多,将分多个章节进行笔记整理,具体如下:

  1. ElasticSearch查询学习笔记章节1——term,terms,match,id查询

   主要是依据精准的查询条件来查询,查询速度快,也是最常用的几类查询方式,具体种类如下:

  • term查询
  • terms查询
  • match_all查询
  • match查询
  • 布尔match查询
  • multi_match查询
  • 根据文档id查询(单个id)
  • 根据文档ids查询(多个id)
  1. ElasticSearch查询学习笔记章节2——prefix,fuzzy,wildcard,range,regexp查询

  主要是涉及ElasticSearch查询条件相对模糊,查询速度相对慢,实时查询时应尽量避免这些方式,但是这些查询方式又具有自己独特不可代替的功能,还是还有必要,具体如下:

  • prefix查询
  • fuzzy查询
  • wildcard查询
  • range查询
  • regexp查询
  1. ElasticSearch查询学习笔记章节3——scroll,delete-by-query,bool,boosting,filter,highlight查询**

  主要涉及ElasticSearch的一些常用的杂项查询;

  • 深分页scroll查询
  • delete-by-query
  • bool查询
  • boosting查询
  • filter查询
  • highlight(高亮)查询
  1. ElasticSearch查询学习笔记章节4——cardinality,range,extended_stats聚合统计aggregations查询

  主要涉及ES的聚合查询Aggregations;

  • cardinality(去重计数)查询
  • range(范围统计)查询
  • extended_stats(统计聚合)查询
  1. ElasticSearch查询学习笔记章节5——geo_distance,geo_bounding_box,geo_polygon地图检索geo查询

.   主要涉及ES的地图检索geo相关的查询;

  • geo_distance查询
  • geo_bounding_box查询
  • geo_polygon查询

整体Java代码的测试用例项目

  整个章节的Java代码放在CSDN资源ElasticSearch常用查询的Java实现;路径效果如下图,欢迎下载访问;

geo_point索引、数据准备

  ES中特有的类型geo_point,用来存储地图类型,某平台外卖。快递体现的配送人员距离你多少米,就是这个数据类型做出来的。

新建索引map

  RESTFul风格的创建索引my_badu_map如下;

PUT /my_badu_map
{"settings": {"number_of_replicas": 3,"number_of_shards": 5}, "mappings": {"properties": {"name":{"type": "text"},"location":{"type": "geo_point"}}}
}

  RESTFul风格给索引my_badu_map添加数据;

PUT /my_badu_map/_doc/1
{"name":"天安门","location":{"lon":116.403981,"lat":39.914492}
}PUT /my_badu_map/_doc/2
{"name":"海淀公园","location":{"lon":116.302509,"lat":39.991152}
}PUT /my_badu_map/_doc/3
{"name":"北京动物园","location":{"lon":116.343184,"lat":39.947468}
}

  RESTFul风格预览数据如下;

POST /my_badu_map/_search#数据结果如下
{"took" : 815,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 3,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "my_badu_map","_type" : "_doc","_id" : "3","_score" : 1.0,"_source" : {"name" : "北京动物园","location" : {"lon" : 116.343184,"lat" : 39.947468}}},{"_index" : "my_badu_map","_type" : "_doc","_id" : "2","_score" : 1.0,"_source" : {"name" : "海淀公园","location" : {"lon" : 116.302509,"lat" : 39.991152}}},{"_index" : "my_badu_map","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"name" : "天安门","location" : {"lon" : 116.403981,"lat" : 39.914492}}}]}
}

ES的地图检索方式

  ES支持的地图检索方式有以下几种;

  • geo_distance:直线距离检索,如给定点A,要求返回地图上距离点A三千米的商家(点外卖场景),如图1;

图1 geo_distance场景

  • geo_bounding_box:以两个点确定一个矩形,获取在矩形内的全部数据,如图2;

图2 geo_bounding_box场景

  • geo_polygon:以多个点,确定多边形,获取多边形内的全部数据,如图3;

图3 geo_polygon场景

基于RESTFul风格实现地图检索

geo_distance

geo_distance涉及的参数如下
location:确定一个点;
distance:确定一个半径,单位米
distance_type:确定一个图形的类型,一般是圆形,arc

  实现要求,查找索引内距离北京站(116.433733,39.908404)3000米内的点;

  RESTFUL代码如下;

POST /my_badu_map/_search
{"query": {"geo_distance":{"location":{"lon":116.433733,"lat":39.908404},"distance":3000,"distance_type":"arc"}}
}

  RESTFUL代码效果如下,在3千米内,是包含了北京天安门的;

{"took" : 3,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "my_badu_map","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"name" : "天安门","location" : {"lon" : 116.403981,"lat" : 39.914492}}}]}
}

geo_bounding_box

geo_bounding_box涉及的参数如下
top_left:左上角的矩形起始点经纬度;
bottom_right右下角的矩形结束点经纬度

  实现要求,查找索引内位于中央民族大学(116.326943,39.95499)以及京站(116.433733,39.908404)矩形的点;

  RESTFUL代码如下;

POST /my_badu_map/_search
{"query": {"geo_bounding_box":{"location":{"top_left":{"lon":116.326943,"lat":39.95499},"bottom_right":{"lon":116.433446,"lat":39.908737}}}}
}

  RESTFUL代码效果如下,北京动物园和天安门在中央民族大学(116.326943,39.95499)以及京站(116.433733,39.908404)矩形内;

{"took" : 37,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 2,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "my_badu_map","_type" : "_doc","_id" : "3","_score" : 1.0,"_source" : {"name" : "北京动物园","location" : {"lon" : 116.343184,"lat" : 39.947468}}},{"_index" : "my_badu_map","_type" : "_doc","_id" : "1","_score" : 1.0,"_source" : {"name" : "天安门","location" : {"lon" : 116.403981,"lat" : 39.914492}}}]}
}

geo_polygon

geo_polygon涉及的参数如下
points:是个数组,存储多变形定点的经纬度,每个点用大括号包起来

  实现要求,查找索引内位于西苑桥(116.300209,40.003423),巴沟山水园(116.29561,39.976004)以及北京科技大学(116.364528,39.996348)三角形内的点;

  RESTFUL代码如下;

POST /my_badu_map/_search
{"query": {"geo_polygon":{"location":{"points":[{"lon":116.29561,"lat":39.976004},{"lon":116.364528,"lat":39.996348},{"lon":116.300209,"lat":40.003423}]}}}
}

  RESTFUL代码效果如下,海淀公园位于西苑桥(116.300209,40.003423),巴沟山水园(116.29561,39.976004)以及北京科技大学(116.364528,39.996348)三角形内;

{"took" : 204,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : {"value" : 1,"relation" : "eq"},"max_score" : 1.0,"hits" : [{"_index" : "my_badu_map","_type" : "_doc","_id" : "2","_score" : 1.0,"_source" : {"name" : "海淀公园","location" : {"lon" : 116.302509,"lat" : 39.991152}}}]}
}

基于Java代码实现地图检索

geo_distance

geo_distance涉及的参数如下
location:确定一个点;
distance:确定一个半径,单位米
distance_type:确定一个图形的类型,一般是圆形,arc

  实现要求,查找索引内距离北京站(116.433733,39.908404)3000米内的点;

  Java代码如下;

    static RestHighLevelClient myClient= EsClient.getClient();  //获取操作ES的String index="sms-logs-index";String index2="my_badu_map";@Testpublic void geoDistance() throws IOException {//1.SearchRequestSearchRequest request=new SearchRequest(index2);//2.指定检索方式SearchSourceBuilder builder=new SearchSourceBuilder();  builder.query(QueryBuilders.geoDistanceQuery("location").distance("3000").point(39.908404,116.433733));request.source(builder);//3.执行查询SearchResponse resp = myClient.search(request, RequestOptions.DEFAULT);//4.返回结果for (SearchHit hit : resp.getHits().getHits()) {System.out.println(hit.getSourceAsMap());}}

  Java代码实现geo_distance如下图4;

图4 Java实现geo_polygon的效果

geo_bounding_box

geo_bounding_box涉及的参数如下
top_left:左上角的矩形起始点经纬度;
bottom_right右下角的矩形结束点经纬度

  实现要求,查找索引内位于中央民族大学(116.326943,39.95499)以及京站(116.433733,39.908404)矩形的点;

  Java代码如下;

    static RestHighLevelClient myClient= EsClient.getClient();  //获取操作ES的String index="sms-logs-index";String index2="my_badu_map";@Testpublic void geoBoundingBox() throws IOException {//1.SearchRequestSearchRequest request=new SearchRequest(index2);//2.指定检索方式SearchSourceBuilder builder=new SearchSourceBuilder();builder.query(QueryBuilders.geoBoundingBoxQuery("location").setCorners(39.95499,116.326943,39.908737,116.433446));request.source(builder);//3.执行查询SearchResponse resp = myClient.search(request, RequestOptions.DEFAULT);//4.返回结果for (SearchHit hit : resp.getHits().getHits()) {System.out.println(hit.getSourceAsMap());}}

    Java实现geo_bounding_box的效果如图5;

图5 Java实现geo_bounding_box的效果

geo_polygon

geo_polygon涉及的参数如下
points:是个数组,存储多变形定点的经纬度,每个点用大括号包起来

  实现要求,查找索引内位于西苑桥(116.300209,40.003423),巴沟山水园(116.29561,39.976004)以及北京科技大学(116.364528,39.996348)三角形内的点;

  Java实现代码代码如下;

   static RestHighLevelClient myClient= EsClient.getClient();  //获取操作ES的String index="sms-logs-index";String index2="my_badu_map";@Testpublic void geoPolygon() throws IOException {//1.SearchRequestSearchRequest request=new SearchRequest(index2);//2.指定检索方式SearchSourceBuilder builder=new SearchSourceBuilder();List<GeoPoint> points=new ArrayList<>();//注意java里面是纬经度的顺序,不要搞反了points.add(new GeoPoint(39.976004,116.29561));points.add(new GeoPoint(39.996348,116.364528));points.add(new GeoPoint(40.003423,116.300209));builder.query(QueryBuilders.geoPolygonQuery("location",points));request.source(builder);//3.执行查询SearchResponse resp = myClient.search(request, RequestOptions.DEFAULT);//4.返回结果for (SearchHit hit : resp.getHits().getHits()) {System.out.println(hit.getSourceAsMap());}}

  Java实现geo_polygon的效果如图6;

图6 Java实现geo_polygon的效果

  更多的geo地图检索,可以参考官网geo-queries;

ElasticSearch查询学习笔记章节5——geo_distance,geo_bounding_box,geo_polygon地图检索geo查询相关推荐

  1. 【ElasticSearch】学习笔记(三)es的高级操作

    [ElasticSearch]学习笔记(三)es的高级操作 文章目录 [ElasticSearch]学习笔记(三)es的高级操作 1. 数据聚合 1.1 聚合总类 1.2 DSL实现聚合 1.2.1 ...

  2. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  3. Dom4j 解析Xml文档及 XPath查询 学习笔记

    2019独角兽企业重金招聘Python工程师标准>>> 本文查阅方法:     1.查阅目录 -- 查阅本文目录,确定想要查阅的目录标题     2.快捷"查找" ...

  4. 《B站-ElasticSearch》学习笔记

    目录 环境安装 安装ElasticSearch 安装ElasticSearch Hand可视化工具 安装Kibana ES核心概念 物理设计 逻辑设计 文档 类型 索引 倒排索引 IK分词器插件 什么 ...

  5. 数据库-Elasticsearch进阶学习笔记(分片、映射、分词器、即时搜索、全文搜索等)

    目录 基础概念 定义 特点 索引(Index) 分片(Shards) 副本(Replicas) 分配(Allocation) 映射(Mapping) 动态映射 显式映射 常见数据类型 文档(docum ...

  6. 数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)

    目录 集群 集群配置 单节点集群 分布式集群 故障转移 水平扩容 路由计算&分片控制 数据CRUD流程 写流程 读流程 更新流程 删除流程 分词器 IK分词器 Pinyin分词器 简繁体转换器 ...

  7. ElasticSearch基础学习笔记

    在学习ElasticSearch之前,先简单了解一下Lucene: Doug Cutting开发 是apache软件基金会4 jakarta项目组的一个子项目 是一个开放源代码的全文检索引擎工具包 不 ...

  8. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. java分布式免费开源搜索引擎 Elasticsearch 详细学习笔记

    网页右边,向下滑有目录索引,可以根据标题跳转到你想看的内容 如果右边没有就找找左边 此文是学习尚硅谷Elasticsearch课程的笔记 Elasticsearch 全文检索引擎 Lucene 是 A ...

最新文章

  1. 遇到bug心寒了?用Enter键即可解决!
  2. 从 jQuery 到 VUE 技术栈
  3. 转载:CSS hack技巧大全
  4. mybatis configuration的内容必须匹配问题
  5. Vue实现仿音乐播放器5-实现今日推荐访问百度音乐API获取数据
  6. 偶然的一次渗透从弱口令->docker逃逸
  7. sql字符串拼接_Mybatis的SqlSession执行sql过程
  8. codeforces 59A-C语言解题报告
  9. c语言贪吃蛇_C语言贪吃蛇完整代码
  10. 左右xcode的重构选项的一些理解
  11. Java实现MD5编码32位
  12. CentOS6.5升级内核到3.10.28
  13. InnoDB的RR隔离级别能否防止“幻读”
  14. linux测试wifi信噪比,无线网络中信噪比(SNR)计算
  15. border-shadow
  16. Unity-动画系统-Animat
  17. w7计算机文件夹打开怎么设置密码,w7文件夹怎么设密码_w7文件夹设置密码操作方法...
  18. QT 科学计算器与谷歌拼音输入法实现
  19. ketchup 消息队列rabbitmq使用
  20. 基于C#实现的小型动物识别推理系统

热门文章

  1. azurecdn搭建https_Azure CDN配置SSL
  2. 通过flask实现web页面简单的增删改查
  3. 基于 Linux 和 MiniGUI 的嵌入式系统软件开发指南题八——MiniGUI 和其他嵌入式 Linux 上的图形及图形用户界面系统
  4. 10001.基于Linux和MiniGUI的嵌入式系统软件开发指南(转载)
  5. python赋值运算符
  6. IDEA注册码及快捷键一览
  7. FPGA基础设计之数码管显示
  8. C语言程序设计(第4版)苏小红 课后程序参考4.4
  9. 解决Unity 2017.3.f1 在win10上无法启动的问题, 0xc000007b错误
  10. python学习基础语法_Python学习笔记之基本语法