elasticsearch 支持强大的经纬度坐标过滤。

1、首先要建立坐标类型的字段'type' ='geo_point'

es存储的值是这样的:

"poi": [
          113.40780444444,
          22.920241666667
      ],

2、构建各种经纬度过滤条件

a、获取屏幕范围内,只需屏幕的两个对角的坐标。

{
        "from": 0,
        "size": 20,
        "query": {
            "filtered": {
                "query": {
                    "match_all": []
                },
                "filter": {
                  "geo_bounding_box" : {
                    "poi" : {
                        "top_right" : {
                            "lat" : 23.172558,
                            "lon" : 113.370667
                        },
                        "bottom_left" : {
                            "lat" : 23.14997,
                            "lon" : 113.313425
                        }
                    }
                  }
                }
            }
        }
    }

php代码:

  1. $filter[] = array('geo_bounding_box'=>array('poi'=>array(
  2. 'top_right'=>array('lat'=>$this->params['rightTop'][1],'lon'=>$this->params['rightTop'][0]),
  3. 'bottom_left'=>array('lat'=>$this->params['leftBottom'][1],'lon'=>$this->params['leftBottom'][0]),
  4. )));
  5. $request['body']['query']['filtered']['filter']['and'] = $filter;

b、以一个点为中心,查找范围

  1. $request['body']['query']['filtered']['filter']['and'][] = array(
  2. 'geo_distance_range' => array(
  3. 'from' => '0km',
  4. 'to'   => '80km',
  5. 'poi'  => array('lon' => $longitude, 'lat' => $latitude)
  6. ),
  7. );

c、按距离排序

"sort": {
            "_geo_distance": {
                "poi": {
                    "lon": "113.25909555556",
                    "lat": "23.131899722222"
                },
                "order": "asc",
                "unit": "km"
            }
        }

参考官方资料:https://www.elastic.co/blog/geo-location-and-search

elasticsearch geo_point 地理位置过滤 按经度排序的更多相关文章

  1. 关于怎样获取DevExpress GridView过滤后或排序后的数据集问题(转)

    GridView用自带的过滤功能过滤数据后,想要获取过滤后的数据集,有两种方式: 一.笨办法就是循环遍历GridView,根据gridView.GetRow()或者gridView.GetDataRo ...

  2. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  3. elasticsearch 深入 —— 地理位置

    地理位置 我们拿着纸质地图漫步城市的日子一去不返了.得益于智能手机,我们现在总是可以知道 自己所处的准确位置,也预料到网站会使用这些信息.我想知道从当前位置步行 5 分钟内可到的那些餐馆,对伦敦更大范 ...

  4. Elasticsearch 查询与过滤

    今天在给上级汇报工作的时候,被问到了这个问题,一时也没回到上来. 英文原文: https://www.elastic.co/guide/en/elasticsearch/guide/current/_ ...

  5. 第2部分 Elasticsearch查询-请求体查询、排序

    一.请求体查询 请求体 search API, 之所以称之为请求体查询(Full-Body Search),因为大部分参数是通过http请求体而非查询字符串来传递的. 请求体查询:不仅可以处理自身的查 ...

  6. Elasticsearch去重查询/过滤重复数据(聚合)

    带家好,我是马儿,这次来讲一下最近遇到的一个问题 我司某个环境的es中被导入了重复数据,导致查询的时候会出现一些重复数据,所以要我们几个开发想一些解决方案,我们聊了聊,相出了下面一些方案: 1.从源头 ...

  7. linux makefile字符串操作函数 替换subst、模式替换patsubst、去首尾空格strip、查找字符串findstring、过滤filter、反过滤filter-out、排序函数sort、取单词word、取单词串wordlist、个数统计words

    1.1       字符操作函数使用 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函 ...

  8. DRF框架(八)——drf-jwt手动签发与校验、搜索过滤组件、排序过滤组件、基础分页组件

    自定义drf-jwt手动签发和校验 签发token源码入口 前提:给一个局部禁用了所有 认证与权限 的视图类发送用户信息得到token,其实就是登录接口,不然进不了登录页面 获取提交的username ...

  9. DRF内置过滤组件与排序组件结合使用

    DRF内置过滤组件Filtering DRF提供了内置过滤组件Filtering,可以结合url路径的改变获取想要的数据,当然用户不可能在url访问路径中自己设置过滤条件,肯定是后端开发人员将前端页面 ...

随机推荐

  1. Picard Tools

    Picard Tools - By Broad Institute http://broadinstitute.github.io/picard/command-line-overview.html ...

  2. Radius 中 与Response Authernticator 与 Message-Authenticator的计算

    /* String RequestStr3 = @"01 00 00 9E EB B2 E8 D9 1E 52 10 03 FB E1 52 39 27 58 93 F0 01 0E 33 ...

  3. 51Nod 1376 最长递增子序列的数量 (DP+BIT)

    题意:略. 析:dp[i] 表示以第 i 个数结尾的LIS的长度和数量,状态方程很好转移,先说长度 dp[i] = max { dp[j] + 1 | a[i] > a[j] && ...

  4. php mysql增删查改

    php mysql增删查改代码段 $conn=mysql_connect('localhost','root','root');  //连接数据库代码 mysql_query("set na ...

  5. Eclipse中显示line number

  6. Codeforces735D Taxes 2016-12-13 12:14 56人阅读 评论(0) 收藏

    D. Taxes time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  7. Linux 输入输出(I/O)重定向

    目录 1.概念 Linux 文件描述符 2.输出重定向 格式 示例 注意 3.输入重定向 格式 示例 4.自定义输入输出设备 解释 示例 最后说两句 1.概念 在解释什么是重定向之前,先来说说什么是文 ...

  8. Linux C 创建目录函数mkdir相关【转】

    转自:http://blog.csdn.net/fallenink/article/details/8480483 原文地址:http://sharp2wing.iteye.com/blog/1280 ...

  9. queued frame 造成图形性能卡顿

    曾经遇到过卡顿是类似的原因:当时对显卡底层知识理解不懂,看到引擎底层有一个MaxFramexxx的接口,实现是使用注册表修改显卡底层的注册信息,当时还是一个掉接口习惯的客户端码农的思维,没理解底层含义 ...

  10. Unity3D中随机函数的应用

    电子游戏中玩家与系统进行互动的乐趣绝大多数取决于事件发生的不可预知性和随机性.在unity3D的API中提供了Random类来解决随机问题. 最简单的应用就是在数组中随机选择一个元素,使用Random ...