Elasticsearch java API (23)查询 DSL Geo查询

地理查询编辑

Elasticsearch支持两种类型的地理数据: geo_point纬度/经度对字段的支持,和 geo_shape领域,支持点、线、圆、多边形、多等。

这组查询:

geo_shape 查询
发现文档与几何图型相交,包含,或与指定的geo-shape不相交。
geo_bounding_box 查询
发现文档与geo-points落入指定的矩形。
geo_distance 查询
发现文档geo-points内指定的中心点的距离。
geo_distance_range 查询
就像 geo_point查询,但是范围是从一个指定的中心点的距离。
geo_polygon 查询
发现文档geo-points内指定的多边形。
geohash_cell 查询
找到的geo-points geohash相交的geohash指定点。

GeoShape查询编辑

看到Geo形状查询

注意: geo_shape类型使用 Spatial4J JTS,这两个都是可选的依赖性。因此您必须添加 Spatial4JJTS到类路径中为了使用这种类型:

[java] view plain copy

  1. <dependency>
  2. <groupId>com.spatial4j</groupId>
  3. <artifactId>spatial4j</artifactId>
  4. <version>0.4.1</version>     <!--1-->
  5. </dependency>
  6. <dependency>
  7. <groupId>com.vividsolutions</groupId>
  8. <artifactId>jts</artifactId>
  9. <version>1.13</version>         <!--2-->
  10. <exclusions>
  11. <exclusion>
  12. <groupId>xerces</groupId>
  13. <artifactId>xercesImpl</artifactId>
  14. </exclusion>
  15. </exclusions>
  16. </dependency>


检查更新Maven中央



检查更新Maven中央

[java] view plain copy

  1. // Import ShapeRelation and ShapeBuilder
  2. import org.elasticsearch.common.geo.ShapeRelation;
  3. import org.elasticsearch.common.geo.builders.ShapeBuilder;

[java] view plain copy

  1. QueryBuilder qb = geoShapeQuery(
  2. "pin.location",               //1
  3. ShapeBuilder.newMultiPoint()      //2
  4. .point(0, 0)
  5. .point(0, 10)
  6. .point(10, 10)
  7. .point(10, 0)
  8. .point(0, 0),
  9. ShapeRelation.WITHIN);   //3




形状



关系可以 ShapeRelation.WITHIN, ShapeRelation.INTERSECTS ShapeRelation.DISJOINT

[java] view plain copy

  1. // Using pre-indexed shapes
  2. QueryBuilder qb = geoShapeQuery(
  3. "pin.location",        //1
  4. "DEU",                    //2
  5. "countries",                //3
  6. ShapeRelation.WITHIN)       //4
  7. .indexedShapeIndex("shapes")    //5
  8. .indexedShapePath("location");  //6




文档的ID包含预先索引的形状。



索引类型预先索引形状在哪里。



关系



预先索引的索引的名称,形状。默认为 形状.



包含预先索引的字段指定为路径的形状。默认为 形状.

地理边界框查询编辑

看到地理边界框查询

[java] view plain copy

  1. QueryBuilder qb = geoBoundingBoxQuery("pin.location") //1
  2. .topLeft(40.73, -74.1)                //2
  3. .bottomRight(40.717, -73.99);        //3




边界框左上角点



边界框右下角点

地理距离查询编辑

看到地理距离查询

[java] view plain copy

  1. QueryBuilder qb = geoDistanceQuery("pin.location")  //1
  2. .point(40, -70)                                 //2
  3. .distance(200, DistanceUnit.KILOMETERS)         //3
  4. .optimizeBbox("memory")                         //4
  5. .geoDistance(GeoDistance.ARC);                  //5




中心点



距离中心点



优化边界框: memory, indexed none



距离计算模式: GeoDistance.SLOPPY_ARC(默认), GeoDistance.ARC或(更精确,但明显慢)GeoDistance.PLANE(更快,但不准确的长距离和接近两极)

地理距离范围查询编辑

看到地理距离范围查询

[java] view plain copy

  1. QueryBuilder qb = geoDistanceRangeQuery("pin.location")      //1
  2. .point(40, -70)                                             //2
  3. .from("200km")                                              //3
  4. .to("400km")                                                //4
  5. .includeLower(true)                                         //5
  6. .includeUpper(false)                                        //6
  7. .optimizeBbox("memory")                                     //7
  8. .geoDistance(GeoDistance.ARC);                              //8




中心点



距离中心点开始



结束中心点的距离



包括意味着更低的价值 from gt false gte true



包括上意味着价值 to lt false lte true



优化边界框: memory, indexed none



距离计算模式: GeoDistance.SLOPPY_ARC(默认), GeoDistance.ARC或(更精确,但明显慢)GeoDistance.PLANE(更快,但不准确的长距离和接近两极)

Geo多边形查询编辑

看到Geo多边形查询

[java] view plain copy

  1. QueryBuilder qb = geoPolygonQuery("pin.location")    //1
  2. .addPoint(40, -70)                                  //2
  3. .addPoint(30, -80)                                  //3
  4. .addPoint(20, -90);                                 //4




添加一个文档应落在多边形的点

Geohash细胞查询编辑

看到Geohash细胞查询

[java] view plain copy

  1. QueryBuilder qb = geoHashCellQuery("pin.location",  //1
  2. new GeoPoint(13.4080, 52.5186))         //2
  3. .neighbors(true)                            //3
  4. .precision(3);                              //4




点。也可以是一个散列 u30



 neighbors选择过滤提供了可能性的筛选细胞旁边给定的细胞。



精度水平

原文地址:https://www.cnblogs.com/a-du/p/9233351.html

时间: 2024-08-30 05:30:05

Elasticsearch java API (23)查询 DSL Geo查询的相关文章

ElasticSearch Java Api -检索索引库

上篇博客记录了如何用java调用api把数据写入索引,这次记录下如何搜索. 一.准备数据 String data1 = JsonUtil.model2Json(new Blog(1, "git简介", "2016-06-19", "SVN与Git最主要的区别...")); String data2 = JsonUtil.model2Json(new Blog(2, "Java中泛型的介绍与简单使用", "2016-0

第08章 ElasticSearch Java API

本章内容 使用客户端对象(client object)连接到本地或远程ElasticSearch集群. 逐条或批量索引文档. 更新文档内容. 使用各种ElasticSearch支持的查询方式. 处理ElasticSearch返回的错误信息. 通过发送各种管理指令来收集集群状态信息或执行管理任务. 8.3 连接到集群 8.3.1 成为ElasticSearch节点 第一种连接到ElasticSearch节点的方式是把应用程序当成ElasticSearch集群中的一个节点. Node node=no

独孤九剑之Elasticsearch Java API破剑式

0.题记之前Elasticsearch的应用比较多,但大多集中在关系型.非关系型数据库与Elasticsearch之间的同步.以上内容完成了Elasticsearch所需要的基础数据量的供给.但想要在海量的数据中找到和自己相关的业务数据,实现对已有的数据实现全文检索.分类统计等功能并应用到业务系统中,必须借助Java API来实现. 1.Elasticsearch Java API 概览Elasticsearch Java API 相关使用研究结果: 1.1 国内的博文讲解Elasticsear

ElasticSearch Java Api -创建索引

ElasticSearch JAVA API官网文档:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-index.html 一.生成JSON 创建索引的第一步是要把对象转换为JSON字符串.官网给出了四种创建JSON文档的方法: 1.1手写方式生成 String json = "{" + "\"user\":\"kimchy\"

Elasticsearch Java API (二): index创建删除 cluster管理

Elasticsearch Java API (二): index创建删除 cluster管理  elastic官网有权威的java api 英文的 需要耐心看 这里整理下基本操作 创建maven工程添加依赖 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>transport</artifactId> <version>5.2.2</ver

Elasticsearch5.0 Java Api(八) -- 常用DSL查询

测试常用的DSL组合查询功能 1 package com.juyun.test; 2 3 import java.net.InetAddress; 4 5 import org.elasticsearch.action.search.SearchResponse; 6 import org.elasticsearch.client.Client; 7 import org.elasticsearch.common.settings.Settings; 8 import org.elasticse

ElasticSearch Java api 详解_V1.0

原英文文档:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/index.html (各个版本的api) Search部分: 查询有两种方法:query Java API和filter Java API 首先看一个例子: import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.Se

Elasticsearch java api 基本搜索部分详解

版权声明:本文非原创文章,转载出处:http://blog.csdn.net/molong1208/article/details/50512149 一.所使用版本的介绍 使用的是elasticsearch2.1.0版本,在此只是简单介绍搜索部分的api使用 二.简单的搜索 使用api的时候,基本上可以将DSL搜索的所有情况均写出来,在此给出一个最简单搜索的全部的过程以及代码,之后将对不同的搜索只是针对函数进行介绍 (1)DSL搜索 对于最简单的DSL搜索,对一个词进行搜索使用url直接进行通信

Elasticsearch Java API 很全的整理

Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种.相比来说transportClient API效率更高,transportClient 是通过Elasticsearch内部RPC的形式进行请求的,连接可以是一个长连接,相当于是把客户端的请求当成 Elasticsearch 集群的一个节点.但是从Elasticsearch 7 后就会移除transportClient .主要原因是transportCl