Elasticsearch 数据类型相关总结:快速参考指南【记录】

在Elasticsearch中,有多种数据类型可用于定义字段。

在开始了解数据类型之前,首先要知道,在Elasticsearch中,分词处理主要针对文本字段,而对于其他类型字段(如数值、日期、布尔等),通常不会进行分词处理。这是因为文本字段需要支持全文搜索、模糊匹配和文本分析,而其他类型字段通常用于精确匹配和聚合计算,不需要进行分词。

一、了解字符串类型(string)

在ES早期版本有一个string数据类型,使用string类型时,有两种用法(通过index来区分):

全文检索分词index=analysis按单个字符匹配被称作analyzed字符串
关键词搜索不分词index=not_analysis按照整个文本进行匹配被称为not-analyzed字符串

Elasticsearch在5.0版本中引入了text和keyword数据类型用于替代string类型。

下面我们通过一个示例来对比,ES分别如何使用string和text/keyward来创建索引:

例:假设我现在要创建名为my_index的索引,包含一个tag的字段(分词),以及一个foo的字段(不分词):

1)在Elasticsearch2.0版本的DSL语句:

PUT /my_index
{"mappings": {"_doc":{"properties": {"tag": {"type": "string","index": "analyzed"},"foo": {"type": "string","index": "not_analyzed"}}}}
}

2)在Elasticsearch5.0版本的DSL语句:

PUT /my_index
{"mappings": {"_doc":{"properties": {"tag": {"type": "text","analyzer": "standard"},"foo": {"type": "keyword"}}}}
}

总结:简而言之,无非就是5.0版本为string找了一个替代方案,text(分词)用于全文检索,keyword(不分词)用于聚合和排序。

扩展:在Elasticsearch中,"analyzer"是用于指定文本字段如何被分析的部分。它定义了在建立索引时和搜索时如何处理文本数据的过程。在提供的示例中,"analyzer"属性指定了"standard"分析器,这意味着文本字段将使用标准分析器进行处理。标准分析器将文本分成单词,并且会根据一些规则进行标准化,例如将单词转为小写。

注意:在Elasticsearch中,在创建索引定义mapping映射时,如果您只有一个字段,可以省略"properties",直接将字段定义放在"_doc" 下。这种情况下,您可以简化索引的创建过程。

注意:从Elasticsearch 7.0版本开始,一个索引只能包含一个类型,因此在创建索引时可以省略type。在示例中,我已经省略了type,因为在较新的Elasticsearch版本中,这是一个可选的设置。

二、简单的数据类型

1、文本类型(text):当一个字段是要被全文检索的,比如Email内容、产品描述,应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项。文本类型通常用于存储文本数据,支持全文搜索和分析。

2、关键字类型(keyword):这种类型适用于结构化的字段,例如:标签、email地址、手机号等,这种类型的字段可以用作过滤、排序、聚合等。用于存储关键字数据,不会被分词,通常用于精确匹配和聚合操作。

3、Numeric类型:用于存储数值类型的数据,包括整数类型(integer、long、short、byte)和浮点数类型(float、double),Numeric类型支持范围查询、排序和聚合操作,在满足需求的情况下,优先使用范围小的字段。字段长度越短,索引和搜索的效率越高。

  • Integer类型(integer):用于存储整数数据,支持有符号的32位整数,范围为-2^312^31-1

  • Long类型(long):用于存储长整数数据,支持有符号的64位整数,范围为-2^632^63-1

  • Short类型(short):占用2个字节,范围为-32,768至32,767;

  • Byte类型(byte):占用1个字节,范围为-128至127;

  • Float类型(float):用于存储单精度浮点数数据,占4个字节;

  • Double类型:用于存储双精度浮点数数据,占8个字节;

下面是一个创建数值类型字段的示例,其它字段同理:

PUT /my_index
{"mappings": {"_doc": {"amount": {"type": "integer"}}}
}

4、日期类型(date):用于存储日期和时间数据,由于JSON中没有日期类型,所以es中的日期类型形式比较多样。

  • 包含格式化日期的字符串, “2024-01-016"或"2024/01/16 12:10:30”;
  • 代表时间毫秒数的长整型数字;
  • 代表时间秒数的整数。

如果在Elasticsearch中未指定日期类型的格式,则默认格式是 “strict_date_optional_time||epoch_millis”。strict_date_optional_time 表示日期时间格式,epoch_millis 表示以毫秒为单位的时间戳。这意味着Elasticsearch会尝试解析日期字符串,如果失败,它将尝试解析为时间戳。

1)使用日期格式示例:

## 创建索引,添加映射
PUT my_index
{"mappings": {"_doc": {"pub_date": {"type": "date"}}}
}## 添加数据
PUT my_index/_doc/11
{ "pub_date": "2018-10-10" }
## Solr中默认使用的日期格式
PUT my_index/_doc/11
{ "pub_date": "2018-10-10T12:00:00Z" }## 时间的毫秒值
PUT my_index/_doc/11
{ "pub_date": "1589584930103" }

2)多种日期格式:多个格式使用双竖线||分隔, 每个格式都会被依次尝试, 直到找到匹配的。

## 添加映射
PUT my_index
{"mappings": {"_doc": {"pub_date": {"type": "date", ## 可以接受如下类型的格式"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"}}}
}

5、布尔类型(boolean):用于存储布尔值,可以接受表示真、假的字符串或数字。

  • 真值: true、“true”、“on”、“yes”、“1”…
  • 假值: false、“false”、“off”、“no”、“0”、“”(空字符串)、0.0、0

6、 二进制型(binary):二进制类型是Base64编码字符串的二进制值,不以默认的方式存储,且不能被搜索。用于存储二进制数据,如图片、音频或视频文件。

## 添加映射
PUT my_index
{"mappings": {"_doc": {"properties": {"title": {"type" : "text"}"blob": {"type": "binary"}}}}
}
## 添加数据
PUT my_index/_doc/1
{"title": "Some binary blog","blob": "hED903KSrA084fRiD5JLgY=="
}

注意:在Elasticsearch中,Base64编码的二进制值应该是连续的,不应该包含换行符\n

7、范围类型(range):range类型支持以下几种:

在这里插入图片描述
(1) 添加映射:

PUT /company
{"mappings": {"properties": {"expected_number": {"type": "integer_range"},"time_frame": {"type": "date_range","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"},"ip_whitelist": {"type": "ip_range"}}}
}

(2) 添加数据:

POST /company/_doc
{"expected_number": {"gte": 100,"lte": 500},"time_frame": {"gte": "2022-01-01","lte": "2023-01-01"},"ip_whitelist": "192.168.1.0/24"
}

(3) 查询数据:

GET /company/_search
{"query": {"range": {"expected_number": {"gte": 200}}}
}

查询结果:

{"took": 3,"timed_out": false,"_shards": {"total": 1,"successful": 1,"skipped": 0,"failed": 0},"hits": {"total": {"value": 1,"relation": "eq"},"max_score": 1.0,"hits": [{"_index": "company","_type": "_doc","_id": "1","_score": 1.0,"_source": {"expected_number": {"gte": 100,"lte": 500},"time_frame": {"gte": "2022-01-01","lte": "2023-01-01"},"ip_whitelist": "192.168.1.0/24"}}]}
}

三、复杂的数据类型

暂时整理到这里,下面类型详细内容,后续抽空补充

1、Array类型:用于存储数组数据。Array类型可以包含多个相同或不同类型的元素,并支持按数组中的某个元素进行查询。

2、Object类型:用于存储复杂的结构化数据。Object类型类似于关系型数据库中的行,可以包含多个属性字段。

3、嵌套类型(nested):嵌套类型是对象数据类型的一个特例, 可以让array类型的对象被独立索引和搜索。

3、Geo类型(geo_point):用于存储地理位置数据。Geo类型支持点、线、多边形等地理形状的索引和查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/242028.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚幻UE 材质-进阶边界混合之运行时虚拟纹理

之前在学习空山新雨后时对于边缘虚化过渡处理有很多技术 今天又要介绍一个边缘过渡的方法:运行时虚拟纹理 文章目录 前言一、运行时虚拟纹理二、使用步骤总结 前言 边缘过渡柔和的方式我们之前介绍了很多,但是效果也不是最好的。 像素偏移PDO和我们今天…

解决国内Linux服务器无法使用Github的方法

解决思路:修改Host https://www.ipaddress.com/ 利用上面的网站查询github.com和raw.githubusercontent.com的DNS解析的IP地址 最后,修改服务器的/etc/hosts 添加如下两行: 140.82.112.3 github.com 185.199.108.133 raw.githubuserconte…

IntelliJ IDEA 常用快捷键一览表(通用型,提高编写速度,类结构、查找和查看源码,替换与关闭,调整格式)

文章目录 IntelliJ IDEA 常用快捷键一览表1-IDEA的日常快捷键第1组:通用型第2组:提高编写速度(上)第3组:提高编写速度(下)第4组:类结构、查找和查看源码第5组:查找、替换…

bash shell基础命令(一)

文章目录 1.shell启动2. shell提示符3. bash手册3.1 man手册解读 4. 浏览Linux文件系统4.1 遍历目录4.1.1 绝对路径4.1.2 相对路径 4.2 列出目录和文件4.3 处理文件4.3.1创建文件4.3.2 复制文件4.3.3 链接文件4.3.3.1.软链接4.3.3.2 硬链接 4.3.4 文件重命名4.3.5 删除文件4.3.…

获取域控的方法

在域渗透中、作为渗透测试人员,获取域控的权限基本上可以获取整个内网的权限 1.高权限读取本地密码 当域管理员在域成员机器上登录进行工作的时候,会将明文密码保存在本地进行的lsass.exe,可以通过 mimikatz来读取到本地的明文密码。 priv…

HarmonyOS应用开发者高级认证试题库(鸿蒙)

目录 考试链接: 流程: 选择: 判断 单选 多选 考试链接: 华为开发者学堂华为开发者学堂https://developer.huawei.com/consumer/cn/training/dev-certification/a617e0d3bc144624864a04edb951f6c4 流程: 先进行…

01-开始Rust之旅

1. 下载Rust 官方推荐使用 rustup 下载 Rust,这是一个管理 Rust 版本和相关工具的命令行工具。下载时需要连接互联网。 这边提供了离线安装版本。本人学习的机器环境为: ubuntu x86_64,因此选用第②个工具链; 1. rust-1.75.0-x86_…

设计模式的学习笔记

设计模式的学习笔记 一. 设计模式相关内容介绍 1 设计模式概述 1.1 软件设计模式的产生背景 设计模式最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977 年美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任 Christopher Alexander 在…

Vue 3 hooks的基本使用及疑问

前言 vue3也用过一段时间了&#xff0c;hooks听说过&#xff0c;但是一直没有用过。公司的前端项目里也没有相应的应用&#xff0c;因此打算系统的学习一下。 hooks与普通函数的区别 以实现一个加法功能为例。 普通函数未抽离 <template><div class"box&quo…

STM32 GD32 瑞萨 psoc 等单片机 无线wifi蓝牙最佳解决方案

新联鑫威一系列低功耗高性价比sdio wifi/蓝牙combo的模块CYWL6208 , CYWL6312, CYW6209等可以搭配stm32 各种型号例如以下,支持sta/ap/apsta&#xff0c;双模蓝牙的应用&#xff0c;支持rt-thread, freertos, Azure RTOS, Linux, Android系统. 稳定强&#xff0c;功耗低&#x…

HFSS笔记/信号完整性分析(二)——软件仿真设置大全

文章目录 1、多核运算设置1.1 如何设置1.2 如何查看自己电脑的core呢&#xff1f;1.3 查看求解的频点 2、求解模式设置Driven Terminal vs Driven modal 3、Design settings4、自适应网格划分5、更改字体设置 仅做笔记整理与分享。 1、多核运算设置 多核运算只对扫频才有效果&…

Java项目:11 Springboot的垃圾回收管理系统

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 功能介绍 本系统通过利用系统的垃圾回收流程&#xff0c;提高垃圾回收效率&#xff0c;通过垃圾回收的申请&#xff0c;增删改查&#xff0c;垃…

stm32 FOC系列 直流有刷控制原理

1、直流有刷驱动板 使用三极管搭建的简易 H 桥电路&#xff0c;如图 5.3.1 所示&#xff1a; 图 5.3.1 是使用三极管搭建的简易 H 桥电路&#xff0c;其中 MOTOR 表示直流有刷电机&#xff0c; Q1、 Q2、 Q3 和 Q4 为 4 个三极管&#xff0c;其中 Q1 和 Q3 接在了电源正极&…

leetcode234. 回文链表

题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;hea…

【已解决】Qt Creator设计模式被禁用不能点的原因及解决方案

Qt Creator 下载地址&#xff08;含历史版本&#xff09;&#xff1a;https://download.qt.io/official_releases/qtcreator/ 症状 Qt Creator 目前最新版为12.0.1&#xff0c;安装后打开.qml文件发现设计工具图标为禁用状态。 原因及解决方案 根据官网材料&#xff08;Qt C…

使用 TiUP 部署 TiDB 集群

TIDB优点 支持分布式且支持事务的关系型数据库&#xff0c;不用考虑分库分表 同时满足了可伸缩&#xff0c;高可用&#xff0c;关系型&#xff0c;支持事务。 基本上按官网的文档来就行了。 在线部署 以普通用户身份登录中控机。以 tidb 用户为例&#xff0c;后续安装 TiUP …

Red Hat Enterprise Linux 8.9 安装图解

引导和开始安装 选择倒计时结束前&#xff0c;通过键盘上下键选择下图框选项&#xff0c;启动图形化安装过程。需要注意的不同主板默认或者自行配置的固件类型不一致&#xff0c;引导界面有所不同。也就是说使用UEFI和BIOS的安装引导界面是不同的&#xff0c;如图所示。若手动调…

软件测试|SQLAlchemy query() 方法查询数据

简介 上一篇文章我们介绍了SQLAlchemy 的安装和基础使用&#xff0c;本文我们来详细介绍一下如何使用SQLAlchemy的query()方法来高效的查询我们的数据。 创建模型 我们可以先创建一个可供我们查询的模型&#xff0c;也可以复用上一篇文章中我们创建的模型&#xff0c;代码如…

RTC讲解

RTC&#xff08;Real Time Clock&#xff09;实时时钟 RTC实时时钟本质上是一个独立的定时器。RTC模块拥有一组连续计数的32位无符号计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配…

【llm 使用llama 小案例】

huggingfacehttps://huggingface.co/meta-llama from transformers import AutoTokenizer, LlamaForCausalLMPATH_TO_CONVERTED_WEIGHTS PATH_TO_CONVERTED_TOKENIZER # 一般和模型地址一样model LlamaForCausalLM.from_pretrained(PATH_TO_CONVERTED_WEIGHTS) tokenize…