Elasticsearch Java API 针对 Geohash7 网点进行分桶聚合
需求整理:
geohash 7网格存储工作热度和学习热度数值,支持随机区域多个范围的热度聚合;
创建索引结构
索引文档需要包含 Geohash 网格、工作热度和学习热度等字段。可以在 Elasticsearch 中定义一个索引,确保 location 字段的类型是 geo_point,用于支持地理空间查询。
PUT /geohash_index
{"mappings": {"properties": {"geohash": {"type": "keyword"},"location": {"type": "geo_point"},"work_heat": {"type": "integer"},"study_heat": {"type": "integer"}}}
}
插入数据
POST /geohash_index/_doc/1
{"geohash": "wx4g0f0","location": {"lat": 39.9042,"lon": 116.4074},"work_heat": 100,"study_heat": 50
}
聚合查询
使用 Elasticsearch 的地理空间范围聚合 (geo_distance aggregation) 实现不同范围内的数据聚合,比如 500m、1.5km、3km,统计工作热度和学习热度。
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.range.GeoDistanceAggregationBuilder;
import org.elasticsearch.common.unit.DistanceUnit;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.beans.factory.annotation.Autowired;public class GeoAggregationQuery {@Autowiredprivate ElasticsearchRestTemplate elasticsearchRestTemplate;public void searchWithGeoAggregation() {// 构建地理空间范围聚合GeoDistanceAggregationBuilder geoDistanceAgg = AggregationBuilders.geoDistance("geo_distance_agg", new GeoPoint(39.9042, 116.4074)).unit(DistanceUnit.METERS).field("location").addRange(0, 500) // 0-500米范围.addRange(500, 1500) // 500米-1.5公里范围.addRange(1500, 3000) // 1.5公里-3公里范围.subAggregation(AggregationBuilders.sum("total_work_heat").field("work_heat")) .subAggregation(AggregationBuilders.sum("total_study_heat").field("study_heat")); // 构建查询NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.matchAllQuery()) .addAggregation(geoDistanceAgg).build();elasticsearchRestTemplate.search(searchQuery, YourEntityClass.class).getAggregations().asMap().forEach((name, agg) -> {// 处理聚合结果,例如输出各个范围内的热度总和System.out.println(name + ": " + agg);});}
}
可以根据需求扩展查询条件,例如增加 BoolQueryBuilder 来过滤特定条件的数据。同样可以通过修改距离和单位,调整聚合的范围。
额外:怎么评估最外围擦边的点要不要算在里面
1. 中心点与半径:
每个距离范围(如 500m、1.5km、3km)是以你指定的中心点为原点,计算的半径距离。在执行查询时,Elasticsearch 通过 Haversine 公式(或其他地理距离计算方法)确定每个文档的地理位置是否在某个距离范围内。
2. 文档是否落入某个范围:
• 如果文档的地理位置计算出的距离小于或等于给定范围(例如 500m 或 1.5km),那么这个文档会被算作属于这个距离范围的桶。
• 如果文档的地理位置超过了给定的范围,那么它不会算作在该桶中。
具体实现:
- 基于中心点:计算距离的起点是你定义的中心点,所有距离测量都是围绕这个点进行。
- 严格的边界计算:擦边的点如果距离与给定范围正好相等,它会被算作属于该范围。
相关文章:
Elasticsearch Java API 针对 Geohash7 网点进行分桶聚合
需求整理: geohash 7网格存储工作热度和学习热度数值,支持随机区域多个范围的热度聚合; 创建索引结构 索引文档需要包含 Geohash 网格、工作热度和学习热度等字段。可以在 Elasticsearch 中定义一个索引,确保 location 字段的类…...
Transformer学习(1):注意力机制
文章目录 什么是注意力如何实现注意注意力的计算过程总结 什么是注意力 在一张图像中,包含了各种信息,而我们会自动关注重要的信息。下图是注意力热力图,可以发现人们会注意兔子的脸这些重要信息。 而在深度学习中,输入数据包含…...
spring模块(六)spring event事件(3)广播与异步问题
发布事件和监听器之间默认是同步的;监听器则是广播形式。demo: event: package com.listener.demo.event;import com.listener.demo.dto.UserLogDTO; import org.springframework.context.ApplicationEvent;public class MyLogEvent extends…...
【Elasticsearch系列八】高阶使用
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【H2O2|全栈】关于CSS(4)CSS基础(四)
目录 CSS基础知识 前言 准备工作 精灵图 概念 属性 案例 浮动 基础属性 清除浮动 案例 预告和回顾 后话 CSS基础知识 前言 本系列博客将分享层叠样式表(CSS)有关的知识点。 接下来的几期内容相对比较少,主要是对前面的内容进…...
node.js+Koa框架+MySQL实现注册登录
完整视频展示:https://item.taobao.com/item.htm?ftt&id831092436619&spma21dvs.23580594.0.0.52de2c1bg9gTfM 效果展示: 一、项目介绍 本项目是基于node.jsKoamysql的注册登录的项目,主要是给才学习node.js和Koa框架的萌新才写的。 二、项目…...
矢量化操作
约定 本文中的”向量”均指一维数组/张量,”矩阵”均值二维数组/张量 前言 在ML当中,向量和矩阵非常常见。由于之前使用C语言的惯性,本人经常会从标量的角度考虑向量和矩阵的运算,也就是用for循环来完成向量或矩阵的运算。实际上,for循环的风格比python内置的操作或pytor…...
【LeetCode】每日一题 2024_9_16 公交站间的距离(模拟)
前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:公交站间的距离 代码与解题思路 func distanceBetweenBusStops(distance []int, start int, destination int) int {// 首先让 start > destination, 这两个谁大对结果没有影响&#…...
【Python笔记】PyCharm大模型项目环境配置
一、PyCharm创建新项目 二、更新pip版本 ...>python.exe -m pip install --upgrade pip 三、生成所需requirements配置文件 ...>pip freeze > requirements.txt 四、安装所需组件requirements.txt ...>pip install -r requirements.txt...
FPGA-Vivado-IP核-虚拟输入输出(VIO)
VIO IP核 背景介绍 Vivado中的VIO(Virtual Input/Output,虚拟输入/输出) IP核是一种用于调试和测试FPGA设计的IP核。当设计者通过JTAG接口与FPGA芯片连接时,在Vivado的Verilog代码中添加VIO IP核,就可以让设计者与FPG…...
使用knn算法对iris数据集进行分类
程序功能 使用 scikit-learn 库中的鸢尾花数据集(Iris dataset),并基于 KNN(K-Nearest Neighbors,K近邻)算法进行分类,最后评估模型的准确率。 代码 from sklearn import datasets# 加载鸢尾…...
GEE Shapefile 格式转换 GeoJSON
在地理信息系统(GIS)领域,数据格式之间的转换是一项常见的需求。例如,将 Shapefile 格式转换为 GeoJSON 格式,对于上传数据到 Google Earth Engine (GEE) 尤其有用。本文将通过一个 Python 脚本的示例,实现…...
从kaggle竞赛零基础上手CV实战(Deepfake检测)
关注B站可以观看更多实战教学视频:hallo128的个人空间 从kaggle竞赛零基础上手CV实战 从kaggle竞赛零基础上手CV实战(Deepfake检测) 目录 从kaggle竞赛零基础上手CV实战(Deepfake检测)背景介绍学习地址课程大纲课程特色…...
Linux cat命令详解使用:高效文本内容管理
cat是 Linux 中最常用的命令之一,主要用于查看文件内容、合并文件以及重定向输出。它可以一次性显示文件内容,也可以将多个文件的内容串联显示出来。 基本语法 cat [选项] [文件...]常用参数选项 -n:为输出的每一行添加行号。-b࿱…...
YOLOv9改进系列,YOLOv9颈部网络SPPELAN替换为FocalModulation
摘要 焦点调制网络(简称FocalNets),其中自注意力(SA)完全由焦点调制模块取代,用于在视觉中建模标记交互。焦点调制包括三个组件:(i)焦点情境化,通过一堆深度卷积层实现,从短到长范围编码视觉上下文,(ii)门控聚合,选择性地将上下文聚集到每个查询标记的调制器中…...
圆环加载效果
效果预览 代码实现 from PyQt5.QtCore import QSize, pyqtProperty, QTimer, Qt, QThread, pyqtSignal from PyQt5.QtGui import QColor, QPainter from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QPushButton, QVBoxLayout, QLabel, QGridLayoutclass Cir…...
leetcode - 分治思想
分治 - 快排 这里快排我们统一使用 数组分三块 和 随机产生基准值的方法实现排序 数组分三块: . - 力扣(LeetCode) 整个思想即将数组按照基准值分为三个区间 , 具体实现: 三指针实现. 遍历指针 , 左区间右边界指针 , 右区间左边界指针 class Solutio…...
Java面试题·解释题·单例模式、工厂模式、代理模式部分
系列文章目录 Java面试题解释题JavaSE部分 Java面试题解释题框架部分 Java面试题解释题单例模式、工厂模式、代理模式部分 文章目录 系列文章目录前言一、设计模式1. 单例模式1.1 单例模式的定义1.2 单例模式的实现方法 2. 工厂模式2.1 工厂模式的定义2.2 工厂模式的实现方法2…...
如何编写智能合约——基于长安链的Go语言的合约开发
场景设计:文件存证系统 在数字化时代,文件存证和版本追踪变得越来越重要。设想一个场景:在一个法律事务管理系统中,用户需要提交和管理各种文件的版本记录,以确保每个文件在不同时间点的状态可以被准确追踪。文件可能经…...
【PHP代码审计】PHP基础知识
🌝博客主页:菜鸟小羊 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 php简介 php是什么? php(全称:Hypertext Preprocessor,即超文本预处理器&…...
java.net.SocketTimeoutException: Connect timed out
Could not install Gradle distribution from https://services.gradle.org/distributions/gradle-8.13-bin.zip. Reason: java.net.SocketTimeoutException: Connect timed outAndroid Studio 从 Gradle 官方服务器下载 gradle-8.13-bin.zip 时,网络连接超时&#…...
intv_ai_mk11应用场景:金融从业者用其生成监管政策要点摘要、投研报告初稿框架
intv_ai_mk11在金融领域的应用实践:政策摘要与投研报告生成 1. 金融从业者的AI助手需求 金融行业每天需要处理海量的监管政策和市场信息,传统人工处理方式面临三大挑战: 时效性压力:新政策发布后需要快速理解要点信息过载&…...
Phi-3-mini-4k-instruct-gguf惊艳案例:同一输入在不同温度下的创意表达多样性对比
Phi-3-mini-4k-instruct-gguf惊艳案例:同一输入在不同温度下的创意表达多样性对比 1. 模型简介与测试背景 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型,特别适合问答、文本改写和创意写作等场景。这个模型最有趣的特点之一,…...
Anaconda环境管理:为Phi-4-mini-reasoning 3.8B创建独立的Python开发环境
Anaconda环境管理:为Phi-4-mini-reasoning 3.8B创建独立的Python开发环境 1. 为什么需要独立环境? 在数据科学和机器学习项目中,环境隔离是个经常被忽视但极其重要的问题。想象一下这样的场景:你花了两周时间调试一个模型&#…...
Wan2.2-I2V-A14B多场景应用:文旅宣传/电商主图/社交媒体动态生成
Wan2.2-I2V-A14B多场景应用:文旅宣传/电商主图/社交媒体动态生成 1. 开箱即用的视频创作利器 想象一下,你只需要输入一段文字描述,就能自动生成一段高清视频。这就是Wan2.2-I2V-A14B文生视频模型带来的革命性体验。无论你是文旅行业的宣传人…...
intv_ai_mk11安全使用指南:敏感信息规避策略、输出内容校验方法、数据持久化提醒
intv_ai_mk11安全使用指南:敏感信息规避策略、输出内容校验方法、数据持久化提醒 1. 安全使用概述 intv_ai_mk11是一款基于Llama架构的AI对话助手,能够处理各类知识问答、文案创作和技术讨论。为确保用户数据安全和合规使用,本指南将详细介…...
假芯片识别与防范:工程师实战指南
1. 假芯片泛滥:半导体行业的隐秘危机最近在调试一块电路板时,我发现一个奇怪的现象:明明使用的是同型号的MCU,但部分板子的功耗异常偏高。经过一周的排查,最终发现问题出在芯片上——我们采购到了一批"套牌"…...
如何用Lingui.js在SSG项目中实现完美国际化:终极指南
如何用Lingui.js在SSG项目中实现完美国际化:终极指南 【免费下载链接】js-lingui 🌍 📖 A readable, automated, and optimized (2 kb) internationalization for JavaScript 项目地址: https://gitcode.com/gh_mirrors/js/js-lingui …...
本地化多模态开发套件:mPLUG-Owl3-2B集成Gradio替代方案的Streamlit改造教程
本地化多模态开发套件:mPLUG-Owl3-2B集成Gradio替代方案的Streamlit改造教程 1. 引言:为什么需要这个改造方案? 如果你尝试过直接使用mPLUG-Owl3-2B这个多模态模型的原生代码,大概率会遇到各种报错——数据类型不匹配、提示词格…...
【数据结构与算法】二叉树从建立开始
为什么你学了二叉树却还是不会做题?从“建树”到“解题”的完整思维体系在学习数据结构的过程中,二叉树几乎是每个人都会接触的内容。但一个很现实的问题是:很多人会写遍历,却不会做题。表面上看是代码能力的问题,实际…...
