Elasticsearch 实现距离查询、排序和筛选


Elasticsearch 实现距离查询、排序和筛选

前言

在现代应用中,位置相关的查询需求越来越普遍。无论是查找附近的餐厅、计算两个地点之间的距离,还是根据用户位置进行排序和筛选,Elasticsearch 都提供了强大的地理位置查询功能。本文将介绍如何在 Elasticsearch 中实现基于距离的查询、排序和筛选。

1. 准备工作

1.1 安装和配置 Elasticsearch

首先,需要确保已经安装并配置好了 Elasticsearch。可以参考官方文档进行安装配置。安装完成后,我们可以通过 Kibana 或者直接使用 REST API 来进行查询操作。

1.2 创建索引并映射地理位置字段

在 Elasticsearch 中,我们需要为地理位置数据定义一个 geo_point 类型的字段。假设我们有一个 locations 索引,存储了各个地点的经纬度信息:

json 复制代码
PUT /locations
{
  "mappings": {
    "properties": {
      "location": {
        "type": "geo_point"
      }
    }
  }
}

2. 实现距离查询

2.1 查询指定距离范围内的地点

我们可以使用 geo_distance 查询来查找位于特定距离范围内的地点。比如,查找距离给定经纬度 5 公里范围内的所有地点:

json 复制代码
GET /locations/_search
{
  "query": {
    "bool": {
      "filter": {
        "geo_distance": {
          "distance": "5km",
          "location": {
            "lat": 40.7128,
            "lon": -74.0060
          }
        }
      }
    }
  }
}

2.2 根据距离进行排序

在有多个匹配结果时,我们通常希望根据与目标位置的距离进行排序。可以通过 geo_distance 函数进行排序:

json 复制代码
GET /locations/_search
{
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 40.7128,
          "lon": -74.0060
        },
        "order": "asc",
        "unit": "km",
        "mode": "min",
        "distance_type": "arc"
      }
    }
  ],
  "query": {
    "match_all": {}
  }
}

3. 结合筛选条件的距离查询

在实际应用中,距离查询通常与其他筛选条件结合使用。以下示例展示了如何根据用户评分筛选出特定范围内的地点:

json 复制代码
GET /locations/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "range": {
            "rating": {
              "gte": 4
            }
          }
        }
      ],
      "filter": {
        "geo_distance": {
          "distance": "10km",
          "location": {
            "lat": 40.7128,
            "lon": -74.0060
          }
        }
      }
    }
  },
  "sort": [
    {
      "_geo_distance": {
        "location": {
          "lat": 40.7128,
          "lon": -74.0060
        },
        "order": "asc",
        "unit": "km"
      }
    }
  ]
}
相关推荐
Raas1002 小时前
MAI Gateway(魔芋企业级AI网关)技术揭秘:AI网关支持DeepSeek吗?从原理到落地
大数据·人工智能·gateway·ai网关·mai gateway·魔芋·企业级产品
合米AI SOP系统2 小时前
新能源零部件|密封锁付装配工位,合米科技AI SOP视觉防错规避工艺遗漏带来的售后故障
大数据·人工智能·科技
Elasticsearch3 小时前
一个按钮,三个位置:我们如何通过更严格的 API 重构 Kibana 的页面页眉
elasticsearch
isNotNullX4 小时前
BOM到底有几种?工程BOM、制造BOM、计划BOM、成本BOM、服务BOM一次讲透
大数据
河南花仙子科技4 小时前
小游戏社交裂变功能的高阶设计思路
大数据·科技·游戏
渡川见闻4 小时前
新手任务怎么高效完成?师徒协同视角
大数据
AgentMaster4 小时前
开源智能客服系统技术对比:从架构设计到生产部署的实战指南
大数据·人工智能·算法
千舟软件5 小时前
【宿舍管理小程序】新生入住不靠纸质表
大数据·运维·服务器·科技·业界资讯
精益数智工坊5 小时前
云计算环境元数据是什么意思?云计算元数据管理怎么做?
大数据·人工智能·数据挖掘·数据可视化
Q26433650236 小时前
【有i源码】基于大数据的城市交通流量与出行特征可视化分析平台-基于Hadoop的城市交通拥堵关联规则与异常检测研究
大数据·hadoop·机器学习·数据挖掘·数据分析·spark·数据可视化