当前位置: 首页 > news >正文

ElasticSearch复杂数据类型

ElasticSearch入门到实战教程:点击查看

1. 对象类型(object)

一个字段下需要多种类型的属性字段,属性 attr 有身高、体重,添加映射语句如下:

POST indexname/_mapping
{"properties": {"attr": {"properties": {"height": {"type": "double"},"weight": {"type": "double"}}}}
}

对象类型新增数据语法

PUT indexname/_doc/1
{"attr": {"height": 176.3,"weight": 64}
}

筛选查询新增的数据

GET indexname/_search
{"query":{"term":{"attr.weight": "64"}}
}

2. 数组类型

ELasticsearch没有专用的数组类型,默认情况下任何字段都可以包含一个或者多个值,但是一个数组中的值要是同一种类型。

  • 字符数组: [ “one”, “two” ]
  • 整型数组:[1,3]
  • 对象数组:[ { “name”: “长度”, “value”: “10” }, { “name”: “内存”, “value”: “16” }]

keyword数组,创建keyword字段

POST indexname/_mapping
{"properties": {"skills": {"type": "keyword"}}
}

新增数据

PUT indexname/_doc/2
{"skills": ["java", "c++"]
}

对象数组,创建对象字段

POST indexname/_mapping
{"properties": {"attrs": {"properties": {"name": {"type": "keyword"},"value": {"type": "keyword"}}}}
}

新增数据

PUT indexname/_doc/3
{"attrs": [{"name": "长度","value": "10"},{"name": "内存","value": "16"}]
}

3. 嵌套文档(nested)

nested嵌套类型是object中的一个特例,可以让对象数组类型独立索引和查询。

项目场景中弥补对象数组的一些查询问题

接着前面创建的对象数组 attrs 先添加几条数据

POST _bulk
{"create":{"_index":"indexname","_id":20}}
{"attrs":[{"name":"长度","value":"64"},{"name":"内存","value":"32"}]}
{"create":{"_index":"indexname","_id":21}}
{"attrs":[{"name":"长度","value":"64"},{"name":"内存","value":"64"}]}
{"create":{"_index":"indexname","_id":22}}
{"attrs":[{"name":"长度","value":"64"}]}

现在业务需求:需要 属性=长度 且 值=32 的数据(目前数据里没有),我们来写查询语法。

GET indexname/_search
{"query": {"bool": {"must": [{"term": {"attrs.name": "长度"}},{"term": {"attrs.value": "32"}}]}}
}

运行后发现居然有数据,为什么呢?我们后面原理篇会讲。

怎么解决这种问题呢?使用 nested 类型即可解决。

添加映射字段

POST indexname/_mapping
{"properties": {"attrsNested": {"type": "nested","properties": {"name": {"type": "keyword"},"value": {"type": "keyword"}}}}
}

添加几条数据

POST _bulk
{"create":{"_index":"indexname","_id":20}}
{"attrsNested":[{"name":"长度","value":"64"},{"name":"内存","value":"32"}]}
{"create":{"_index":"indexname","_id":21}}
{"attrsNested":[{"name":"长度","value":"64"},{"name":"内存","value":"64"}]}
{"create":{"_index":"indexname","_id":22}}
{"attrsNested":[{"name":"长度","value":"64"}]}

查询数据

GET indexname/_search
{"query": {"nested": {"path": "attrsNested","query": {"bool": {"must": [{"term": {"attrsNested.name": "长度"}},{"term": {"attrsNested.value": "32"}}]}}}}
}

已经查不到数据了,问题完美解决

4. 子字段

text类型不能用于排序、聚合。为什么呢?因为它的属性 fielddata 默认是false,设置为true就可以了,但是不建议使用,会增加内存的压力。

添加字段映射(不建议设置true):

POST indexname/_mapping
{"properties": {"address": {"type": "text","fielddata":true}}
}

直接使用 keyword 类型可以进行排序、聚合。

想必会有同学有疑问:

同样是字符串类型,干脆直接都用keyword类型不就行了。

如果你不需要 分词 那么你用keyword完全可以,如果你需要对字段值分词,那你还是需要用text。

那么有没有不增加压力,而且不用两个字段的方法呢? 当然有,就是做子字段!

POST indexname/_mapping
{"properties": {"address": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}
}

address 字段下增加了 keyword 名字的字段,类型是 keyword,设置256长度

对应查询子字段keyword的语句

GET indexname/_search
{"query": {"term":{"address.keyword": ""}}
}

5. 地理类型

geo_point 是地理类型。移动互联网的时代,移动设备越来越多,要根据地理位置搜索地址,可以把地址的经纬度数据设置地理数据类型。

POST indexname/_mapping
{"properties": {"location": {"type": "geo_point"}}
}

添加一条地理位置数据

PUT indexname/_doc/6
{"location": {"lat": 41.07,"lon": 116.64}
}
  • lat(经度)
  • lon(纬度)

根据(41.07,116.14)坐标,查询100km内的位置信息

GET indexname/_search
{"query": {"geo_distance": {"distance": "100km","location": {"lat": 41.07,"lon": 116.14}}}
}

根据(23.6,32.2)位置,对查询结果进行远近排序

GET indexname/_search
{"query": {"match_all": {}},"sort": [{"_geo_distance": {"location": "23.6,32.2","unit": "km"}}]
}

更多资料请看《ElasticSearch入门到实战教程》:点击查看

相关文章:

ElasticSearch复杂数据类型

ElasticSearch入门到实战教程:点击查看 1. 对象类型(object) 一个字段下需要多种类型的属性字段,属性 attr 有身高、体重,添加映射语句如下: POST indexname/_mapping {"properties": {"…...

JavaScript_Pig Game保存当前分数

上个文章我们基本上完成了摇色子和切换当前玩家的功能。 现在我们开始写用户选择不再摇骰子的话,我们将用户的当前分数存入到持有分数中! ● 首先我们应该利用一个数组去存储两个用户的分数 const scores [0, 0];● 接着我们利用数组来对分数进行累…...

2023/10/30 JAVA学习

JAVA浮点型运算会出现精度问题 如果没break,不会立刻停止,会执行下一个语句,并且不会判断条件,执行完后break 也可以这样写定义动态数组 两个变量地址相同,指向了同一个数组对象,所以更改一个另一个也会进行更改 方法其实就是函数 OUT: 外部标签,一种神奇的方式, print是输出括…...

测试八股文-Selenium

测试八股文-Selenium 总结了一些selenium的常见问题,欢迎评论区补充,如需教学辅导可私信作者 什么是Selenium? Selenium是一个自动化测试框架,用于模拟用户在Web应用程序中的交互行为。它支持多种语言,包括Java、Py…...

数据库第8章作业

ps:本篇只为记录和分享 一. 单选题(共20题) 1. (单选题)E-R图是数据库设计的工具之一,它适用于建立数据库的( )。 A. 概念模型B. 物理模型C. 逻辑模型D. 结构模型 我的答案: A :概念模型; 2. (单选题)数…...

【OpenCV实现平滑图像金字塔,轮廓:入门】

文章目录 概要图像金字塔轮廓:入门 概要 文章内容的概要: 平滑图像金字塔: 图像金字塔是什么? 图像金字塔是指将原始图像按照不同的分辨率进行多次缩小(下采样)得到的一系列图像。这种处理方式常用于图像…...

Java JVM垃圾回收确定垃圾的两种方式,GC Root

文章目录 前言一、如何确定是垃圾?引用计数法根可达路径法 二、GC Root1、以下可作为GC Root对象2、判断可回收:GC Root不可达3、真正宣告对象死亡需经过两次标记过程(重要) 前言 对于Java两种确定对象为可回收的两种方式&#x…...

java集合之List接口实现类常用方法详解

目录 一、List集合概述 二、ArrayList类 三、ArrayList常用方法实例 四、LinkedList类 五、Linkedist常用方法实例 一、List集合概述 java.util.List接口继承自Collection接口,是单列集合的一个分支,通常将实现了List接口的对象称为List集合&#x…...

三分钟带你了解JS、原型、原型链

1.什么是JS? JavaScript是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象; 它是基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式; 白话一点说就是…...

C# 基于腾讯云人脸核身和百度云证件识别技术相结合的 API 实现

目录 腾讯云人脸核身技术 Craneoffice.net 采用的识别方式 1、活体人脸核身(权威库): 2、活体人脸比对: 3、照片人脸核身(权威库): 调用成本 百度云身份证识别 调用成本 相关结合点 核心代码 实现调用人脸核身API的示例 实现调用身…...

LeetCode每日一题——275. H-Index II

文章目录 一、题目二、题解 一、题目 Given an array of integers citations where citations[i] is the number of citations a researcher received for their ith paper and citations is sorted in ascending order, return the researcher’s h-index. According to the…...

项目添加EZOpenSDK之后就开始报错:could not build module foundation等

最近修改一个老项目,出现了一个报错问题。困扰了很久。现在终于找到解决方法了。分享一下。 正常的项目,使用pod引入EZOpenSDK之后就开始报错了,下面就是错误信息: could not build module foundation错误 could not build modul…...

“智能科技·链接未来”2024中国国际人工智能产品展览会·智博会

2024年中国国际人工智能产品展览会(简称世亚智博会)将于3月份在上海举办,6月份在北京举办。本届展会以“智能科技链接未来”为主题,将集中展示全球前沿的人工智能技术和应用,以及人工智能在各个领域的新成果。 本届展会…...

华为NAT配置实例(含dhcp、ospf配置)

一、网络拓朴如下: 二、要求:PC1 能访问到Server1 三、思路: R2配置DHCP,R2和R1配OSPF,R1出NAT 四、主要配置: R2的DHCP和OSPF: ip pool 1gateway-list 10.1.1.1 network 10.1.1.0 mask 25…...

怎样才能把视频号的视频保存到相册,怎么下载视频号视频两个方法轻松解决

在微信客户端想要下载视频号视频却不知道怎么保存到本地相册?让不少网友犯了难,不用在纠结怎么样才可以将视频号视频下载下来,今天就分享两个小程序将视频号视频提取出来,另外在告诉大家一个下载技巧,一定要看到到结尾…...

软考系统架构师知识点集锦七:计算机系统基础知识

一、考情分析 二、考点精讲 2.1计算机系统概述 2.1.1计算机系统组成 2.1.2 存储系统 时间局部性:指程序中的某条指令一旦执行,不久以后该指令可能再次执行,典型原因是由于程序中存在着大量的循环操作。 空间局部性:指一旦程序访问了某个存储单元,不久…...

k8s节点已有镜像,但Pod一直在拉取镜像时卡着

Pod状态为ContainerCreating,查看日志提示pull镜像,但该镜像在Node节点已经存在,且拉取策略为IfNotPresent 解决:重启kubelet...

用图说话——流程图进阶

目录 一、基本流程图 二、时序流程图 一、基本流程图 经常阅读歪果仁绘制的流程图,感觉比较规范,自己在工作中也尝试用他们思维来绘图,这是一个小栗子: 二、时序流程图 在进行Detail设计过程中,一般的绘图软件显得…...

深入了解 Elasticsearch 8.1 中的 Script 使用

一、什么是 Elasticsearch Script? Elasticsearch 中的 Script 是一种灵活的方式,允许用户在查询、聚合和更新文档时执行自定义的脚本。这些脚本可以用来动态计算字段值、修改查询行为、执行复杂的条件逻辑等等。 二、支持的脚本语言有哪些 支持多种脚本…...

激光雷达点云基础-点云滤波算法与NDT匹配算法

激光雷达点云处理在五年前就做了较多的工作,最近有一些新的接触发现激光雷达代码原理五年前未见重大更新,或许C与激光雷达结合本身就是比较高的技术门槛。深度学习调包侠在硬核激光雷达技术面前可以说是完全的自愧不如啊。 1、点云滤波 在获取点云数据…...

从MATLAB验证到FPGA上板:双频信号叠加的完整开发闭环实战

从MATLAB验证到FPGA上板:双频信号叠加的完整开发闭环实战 在数字信号处理领域,实现双频信号的精确叠加是一个常见但极具挑战性的任务。无论是通信系统中的载波调制,还是音频处理中的音效合成,都需要工程师能够准确地在硬件层面实现…...

Unity资源提取技术解密:AssetRipper效能革命与实战指南

Unity资源提取技术解密:AssetRipper效能革命与实战指南 【免费下载链接】AssetRipper GUI Application to work with engine assets, asset bundles, and serialized files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper 在游戏开发迭代加速…...

MariaDB Docker容器权限配置问题分析与解决方案

MariaDB Docker容器权限配置问题分析与解决方案 1. 问题背景 在使用MariaDB Docker容器时,用户遇到了远程访问权限配置失效的问题。具体表现为: 手动创建的远程用户(如root%、****%、********%)在容器重启后无法远程连接权限表中显…...

怎样避免网站因 SEO 优化而被搜索引擎惩罚

<h2>怎样避免网站因 SEO 优化而被搜索引擎惩罚</h2> <p>在当今数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;已经成为了任何网站想要获得流量和提升知名度的关键因素。SEO 优化的过程并不是一帆风顺&#xff0c;特别是在过度优化时&#x…...

GPEN肖像增强使用技巧:自然、强力、细节三种模式适用场景解析

GPEN肖像增强使用技巧&#xff1a;自然、强力、细节三种模式适用场景解析 1. 认识GPEN的三种处理模式 GPEN作为当前最先进的肖像增强工具之一&#xff0c;其核心价值在于提供了三种差异化的处理模式&#xff1a;自然、强力和细节。这三种模式不是简单的强度差异&#xff0c;而…...

开源小模型也能干大事:MinerU图文理解实战教程

开源小模型也能干大事&#xff1a;MinerU图文理解实战教程 1. 项目简介 OpenDataLab MinerU 是一个专门针对文档理解设计的智能多模态模型&#xff0c;基于 OpenDataLab/MinerU2.5-1.2B 模型构建。虽然只有 1.2B 参数&#xff0c;但这个模型在文档解析方面表现出色&#xff0…...

AI人脸隐私卫士快速部署指南:3步启动WebUI界面,开箱即用

AI人脸隐私卫士快速部署指南&#xff1a;3步启动WebUI界面&#xff0c;开箱即用 1. 引言&#xff1a;你的隐私&#xff0c;需要一道智能防线 你有没有过这样的困扰&#xff1f;公司团建拍了张大合照&#xff0c;想发朋友圈分享喜悦&#xff0c;却担心照片里同事们的隐私&…...

Graphormer开源可部署意义:支撑国家AI for Science重大科技基础设施

Graphormer开源可部署意义&#xff1a;分子属性预测使用指南 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络模型&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子基准测试中表现优…...

智能水塔改造指南:用S7-200PLC+超声波传感器实现低成本自动化

智能水塔改造实战&#xff1a;S7-200PLC与超声波传感器的低成本自动化方案 在农村和小型工厂的实际运营中&#xff0c;水塔作为重要的供水设施&#xff0c;其稳定性和自动化程度直接影响着日常生产和生活。传统的人工监控方式不仅效率低下&#xff0c;还存在水位失控的风险。本…...

Polars 2.0大规模清洗性能翻倍的7个底层优化技巧:基于真实金融风控流水线压测数据

第一章&#xff1a;Polars 2.0大规模数据清洗性能跃迁的工程意义Polars 2.0 的发布标志着 Rust 原生 DataFrame 库在工程落地层面实现关键突破——其基于 Arrow 2.0 和全新查询优化器&#xff08;QOv2&#xff09;重构的执行引擎&#xff0c;将典型 ETL 清洗任务的吞吐量提升达…...