Elasticsearch--地理搜索

地理位置索引

空间搜索映射定义

elasticsearch中使用geo_point类型定义地理位置。

示例

下面是一些示例数据:
bmdcKuB.jpg
location字段是geo_point类型的,可以使用字符串,数字或者一个对象来提供经纬度。注意使用字符串和数组来提供经纬度时,经度和纬度参数有不同的顺序。最后一条记录使用地理散列值,详细描述见http://en.wikipedia.org/wiki/Geohash

使用坐标进行查询的方式有多种

基于距离的排序

按照与给定地点的距离进行排序。

{
    "query":{
        "match_all":{

        }
    },
    "sort":[
        {
            "_geo_distance":{
                "location":"48.1312, 2.356",
                "unit":"km"
            }
        }
    ]
}

使用_geo_distance表明按照距离进行排序,unit的值有:km(公里),mi(英里)。

边界框过滤

当需要在地图上显示结果,或者允许用户标记地图区域来搜索时,非常有用

{
    "filter":{
        "geo_bounding_box":{
            "location":{
                "top_left":"52.346, -1.962",
                "bottom_right":"48.155, 2.356"
            }
        }
    }
}

通过提供左上和右下坐标,形成一个矩形区域。Elasticsearch会自动计算出该区域,并返回位于该区域中的点的数据记录。

距离的限制

把结果限定为离基准点一个选定的距离之内。

{
    "filter":{
        "geo_distance":{
            "location":"48.656, 2.355",
            "distance":"500km"
        }
    }
}

任意地理形状搜索

Elasticsearch使用geo_shape来定义自定义形状。
映射如下:

{
    "poi":{
        "properties":{
            "name":{
                "type":"string",
                "index":"not_analyzed"
            },
            "location":{
                "type":"geo_shape"
            }
        }
    }
}

上面定义了一个poi索引类型,location字段使用geo_shape类型(不同的es版本写法略有不同)。
FBljck1.jpg
geo_shape类型字段的结构语法被称为GeoJson.它允许我们定义各种地理类型。

一个点的第一个元素是经度,第二个元素是纬度。

{
    "location":{
        "type":"point",
        "coordinates":[
            -0.265,
            51.5646
        ]
    }
}

包络线

一个包络线(Envelope)通过提供左上和右下两个坐标定义一个框。

{
"type":"envelope",
"coordinates":[[-0.265, 51.5646],[56.166, 4.621]]
}

多边形

一个多边形通过一个连接点的列表来创建。数组中的第一个点和最后一个点必须是一样的,保证闭合。

{
"type":"polygon",
"coordinates":[
    [-0.265, 51.5646],[56.166, 4.621],
    [6.255, 5.5646],[6.166, 9.621],
    [3.274, 34.566],[12.386, 6.741],
    [-0.265, 51.5646],[56.166, 4.621]
    ]
}

多个多边形

RBitkRO.jpg
zSxQpJw.jpg
multipolygon形状包含多个多边形,除了有多个多边形还可以包含多个被排除的形状。

比如查询某个区域中是否有数据时,可以使用多边形定义这个区域,elasticsearch就能返回该区域内的数据。
下面是一个查询用法:
yKEO5KO.jpg

把形状保存到索引中

形状的定义很复杂,但是形状不会经常改变。在索引中定义形状,并在查询中使用它们。
映射定义如下:
t8aksSO.jpg
索引下面数据:
RhecZaS.jpg
查询语句如下:

{
    "filter":{
        "geo_shape":{
            "location":{
                "index_shape":{
                    "index":"countries",
                    "type":"country",
                    "path":"area",
                    "id":1
                }
            }
        }
    }
}

比较最近这两个查询,shape变成了indexed_shape。需要告诉elasticsearch去哪里找这个形状。

转载于:https://www.cnblogs.com/51zone/p/9853818.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一个开源的分布式搜索和分析引擎,它被广泛应用于全文搜索、日志分析、数据可视化等领域。下面是Elasticsearch各版本的主要特性介绍: 1. Elasticsearch 1.x系列: - 分布式搜索引擎:支持水平扩展,可以将数据分布在多个节点上进行并行处理。 - 实时数据索引和搜索:支持实时索引和搜索,可以快速响应用户的查询请求。 - 多种查询类型:支持全文搜索、精确匹配、范围查询、模糊查询等多种查询方式。 - 分布式聚合功能:支持按照不同的条件对数据进行聚合操作,如求和、平均值、最大值、最小值等。 - 支持多种数据类型:支持文本、数字、日期等多种数据类型的索引和搜索。 2. Elasticsearch 2.x系列: - 文档型数据存储:引入了新的文档型数据存储方式,提高了索引和搜索的性能。 - 查询优化:对查询进行了优化,提高了搜索的速度和准确性。 - 安全性增强:引入了基于角色的访问控制机制,提供了更加灵活和安全的权限管理功能。 - 支持更多语言:增加了对中文、日文等非拉丁字符的支持。 3. Elasticsearch 5.x系列: - 索引模板:引入了索引模板的概念,可以定义索引的结构和设置默认的分析器等。 - 集群监控和管理:提供了更加全面和直观的集群监控和管理功能,方便管理员进行集群的维护和管理。 - SQL查询:支持使用SQL语句进行查询,方便开发人员使用熟悉的SQL语法进行数据检索。 - 增强的聚合功能:引入了新的聚合功能,如直方图、百分比等,提供更多灵活的数据分析能力。 4. Elasticsearch 6.x系列: - 索引生命周期管理:引入了索引生命周期管理功能,可以自动管理索引的创建、删除和归档等操作。 - 安全性增强:进一步增强了安全性功能,支持基于SSL/TLS的通信加密和身份验证。 - 支持更多数据类型:增加了对地理位置数据、IP地址数据等更多数据类型的支持。 5. Elasticsearch 7.x系列: - 索引分片优化:对索引分片进行了优化,提高了索引和搜索的性能。 - 引入ILM(Index Lifecycle Management):提供了更加灵活和可配置的索引生命周期管理功能。 - 引入CCR(Cross Cluster Replication):支持跨集群的数据复制和同步,提高了数据的可用性和容灾能力。 - 引入EQL(Elasticsearch Query Language):支持使用类似SQL的语法进行复杂的查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值