袁庭新ES系列09节 | 使⽤kibana对类型及映射操作

news/发布时间2024/5/15 20:06:07

前言

类型及映射是Elasticsearch中重要的两个概念。本章节袁老师将带领同学们来学习Elasticsearch中的类型和映射部分的内容。先透露一下,在Elasticsearch中,类型(type)相当于关系数据库中的table概念;映射(mapping)相当于数据库中的schema,用来约束字段的类型。有些小伙伴此时可能会感到云里雾里,那我们就带着疑问继续去探讨相关的内容。

一. 创建字段映射

1.字段映射介绍

有了索引库 ,等于有了数据库中的Database。接下来就需要索引库中的类型了,也就是数据库中的表。创建数据库表需要设置字段约束,索引库也一样,在创建索引库的类型时,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫作字段映射(Mapping)。

注意:Elasticsearch7.x取消了索引type类型的设置,不允许指定类型,默认为_doc,但字段仍然是有的,我们需要设置字段的约束信息,叫作字段映射(Mapping)。

字段的约束我们在学习Lucene中我们都见到过,包括到不限于:

  • 字段的数据类型
  • 是否要存储
  • 是否要索引
  • 是否分词
  • 分词器是什么

我们一起来看下创建的语法。

2.创建字段映射语法

2.1 创建字段映射语法

语法格式:请求方式依然是PUT。

PUT /索引库名/_mapping/typeName
{"properties": {"字段名": {"type": "类型","index": true,"store": false,"analyzer": "分词器"}}
}

类型名称:就是前面讲的type的概念,类似于数据库中的表。

字段名:字段名称由开发者自定义,每个字段名下可指定多个属性。具体属性见下表:

属性

描述

type

类型,可以是text、keyword、long、short、date、integer、object等

index

是否索引,默认为true

store

是否存储,默认为false

analyzer

分词器,例如设置为ik_max_word值,即使用IK分词器

2.2 创建字段映射案例

演示示例:

PUT /yx/_mapping/goods
{"properties": {"title": {"type": "text","store": true,"analyzer": "ik_max_word"},"images": {"type": "keyword","index": false,"store": true},"price": {"type": "float"}}
}

如果yx索引库存在,响应结果见下:

{"acknowledged": true
}

如果yx索引库不存在,响应结果见下:

{"error": {"root_cause": [{"type": "index_not_found_exception","reason": "no such index","resource.type": "index_or_alias","resource.id": "yx","index_uuid": "_na_","index": "yx"}],"type": "index_not_found_exception","reason": "no such index","resource.type": "index_or_alias","resource.id": "yx","index_uuid": "_na_","index": "yx"},"status": 404
}

注意:在进行创建索引库中的字段映射时,需要先确保索引库被创建,否则会抛index_not_found_exception异常。

上述案例中,就给“yx”这个索引库添加了一个名为goods的类型,并且在类型中设置了3个字段:

  • title:商品标题
  • images:商品图片
  • price:商品价格

并且给这些字段设置了一些属性,至于这些属性对应的含义,我们在后续会详细介绍。

二. 查看映射关系

语法格式:

GET /索引库名/_mapping

查看某个索引库中的所有类型的映射。如果要查看某个类型映射,可以在路径后面跟上类型名称。即:

GET /索引库名/_mapping/类型名

演示示例:

GET /yx/_mapping
GET /yx/_mapping/goods

响应结果:

{"yx": {"mappings": {"goods": {"properties": {"images": {"type": "keyword","index": false,"store": true},"price": {"type": "float"},"title": {"type": "text","store": true,"analyzer": "ik_max_word"}}}}}
}

三. 字段数据类型详解

Elasticsearch中支持的数据类型非常丰富。具体查看Field data types | Elasticsearch Guide [8.12] | Elastic文档介绍。

1.字段数据类型介绍

每个字段都有一个字段数据类型或字段类型。此类型指示字段包含的数据类型(如字符串或布尔值)及其预期用途。例如,可以将字符串索引到text字段和keyword字段。但是,text字段值将被分析用于全文搜索,而keyword字符串则保留原样用于过滤和排序。

字段类型按族分组。同一族中的类型具有完全相同的搜索行为,但可能具有不同的空间使用或性能特征。

目前,有两个类型族,keyword和text。其他类型族只有一个字段类型。例如,boolean类型族由一种字段类型组成:boolean。

2.字段数据类型分类

2.1 常用类型

Elasticsearch支持丰富的数据类型,见下表:

2.2 string类型

string类型取值见下:

  • text:使用文本数据类型的字段,它们会被分词,文本字段不用于排序,很少用于聚合,如文章标题、正文。
  • keyword:关键字数据类型,用于索引结构化内容的字段,不会被分词,必须完整匹配的内容,如邮箱、身份证号等。支持聚合。

这两种类型都是比较常用的,但有的时候,对于一个字符串字段,我们可能希望他两种都支持,此时,可以利用其多字段特性。

"properties": {"title": {"type": "text","analyzer": "ik_max_word","fields": {"sort":{"type": "keyword"}},"index": true}
}

2.3 Numerical数值类型

数值类型介绍见下:

  • 基本数据类型:long、interger、short、byte、double、float、half_float
  • float单精度32位
  • double双精度64位
  • half_float半精度16位
  • 浮点数的高精度类型scaled_float

带有缩放因子的缩放类型浮点数,依靠一个 long数字类型通过一个固定的(double类型)缩放因数进行缩放。

需要指定一个精度因子,比如10或100。Elasticsearch会把真实值乘以这个因子后存储,取出时再还原。

2.4 Date日期类型

Elasticsearch可以将日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

2.5 Array数组类型

进行匹配时,任意一个元素满足,都认为满足。

排序时,如果升序则用数组中的最小值来排序,如果降序则用数组中的最大值来排序。

字符串数组:["one", "two"]
整数数组:[1, 2]
数组的数组:[1, [2, 3]]等价于[1, 2, 3]
对象数组:[{"name": "Mary", "age": 12}, {"name": "John", "age": 10}]

2.6 Object对象

JSON文档本质上是分层的。文档包含内部对象,内部对象本身还包含内部对象。

{"region": "US","manager.name": "John Smith","manager.age": 30
}

可以将上述的文档可以改写成以下形式。

{"mappings": {"properties": {"region": { "type": "keyword"},"manager": {"properties": {"name": { "type": "text" },"age": { "type": "integer" }}}}}
}

2.7 ip地址

IPv4和IPv6地址。

创建一个my_ip_addr索引库,并指定ip_addr字段的类型是ip。

PUT /my_ip_addr
{ "mappings": { "_doc": { "properties": { "ip_addr": { "type": "ip" } } } } 
}{"acknowledged": true,"shards_acknowledged": true,"index": "my_ip_addr"
}

向索引库中添加一条数据。

PUT /my_ip_addr/_doc/1 
{"ip_addr": "192.168.1.1"
}{"_index": "my_ip_addr","_type": "_doc","_id": "1","_version": 1,"result": "created","_shards": {"total": 2,"successful": 1,"failed": 0},"_seq_no": 0,"_primary_term": 1
}

查询my_ip_addr索引库中的数据。

GET /my_ip_addr/_search 
{ "query": { "term": { "ip_addr": "192.168.0.0/16" } } 
}{"took": 52,"timed_out": false,"_shards": {"total": 5,"successful": 5,"skipped": 0,"failed": 0},"hits": {"total": 1,"max_score": 1,"hits": [{"_index": "my_ip_addr","_type": "_doc","_id": "1","_score": 1,"_source": {"ip_addr": "192.168.1.1"}}]}
}

2.8 数组

在Elasticsearch中,数组不需要专用的字段数据类型。默认情况下,任何字段都可以包含零个或多个值,但是,数组中的所有值必须是相同的字段类型。

2.9 多领域

出于不同的目的,以不同的方式索引同一字段通常很有用。例如,一个string字段可以映射为一个text用于全文搜索的字段,也可以映射为一个keyword用于排序或聚合的字段。或者,您可以使用标准分析器(standard analyzer)、英语分析器(english analyzer)和法语分析器(french analyzer)对文本字段进行索引。

这就是多领域的目的。fields大多数字段类型通过fields参数支持多字段。

3.index

index影响字段的索引情况。

  • true:字段会被索引,则可以用来进行搜索过滤。默认值就是true,只有当某一个字段的index值设置为true时,检索ES才可以作为条件去检索。
  • false:字段不会被索引,不能用来搜索。

index的默认值就是true,也就是说你不进行任何配置,所有字段都会被索引。

但是有些字段是我们不希望被索引的,比如商品的图片信息(URL),就需要手动设置index为false。

4.store

是否将数据进行额外存储。

在学习Lucene时,我们知道如果一个字段的store设置为false,那么在文档列表中就不会有这个字段的值,用户的搜索结果中不会显示出来。

但是在Elasticsearch中,即便store设置为false,也可以搜索到结果。原因是Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存到一个叫做_source的属性中。而且我们可以通过过滤_source来选择哪些要显示,哪些不显示。

而如果设置store为true,就会在_source以外额外存储一份数据(多余),因此一般我们都会将store设置为false,事实上,store的默认值就是false。

在某些情况下,这对store某个领域可能是有意义的。例如,如果您的文档包含一个title、一个date和一个非常大的content字段,则可能只想检索title和date而不必从一个大_source字段中提取这些字段:

PUT /my_index
{"mappings": {"_doc": {"properties": {"title": {"type": "text","store": true},"date": {"type": "date","store": true},"content": {"type": "text"}}}}
}

5.boost

网站权重:网站权重是指搜索引擎给网站(包括网页)赋予一定的权威值,对网站(含网页)权威的评估评价。一 个网站权重越高,在搜索引擎所占的份量越大,在搜索引擎排名就越好。提高网站权重,不但利于网站(包括网页)在搜索引擎的排名更靠前,还能提高整站的流量,提高网站信任度。所以提高网站的权重具有相当重要的意义。 权重即网站在SEO中的重要性、权威性。英文Page Strength。

1.权重不等于排名。

2.权重对排名有着非常大的影响。

3.整站权重的提高有利于内页的排名。

新增数据时,可以指定该数据的权重,权重越高,得分越高,排名越靠前。

PUT /my_index
{"mappings": {"_doc": {"properties": {"title": {"type": "text","boost": 2},"content": {"type": "text"}}}}
}

title字段上的匹配项的权重是字段上的匹配项的权重的两倍content ,默认boost值为1.0 。 提升仅适用于Term查询(不提升prefix、range和模糊查询)。

四. 一次创建索引库和类型

传统方式创建索引库和设置类型分为两个步骤。

第一步:创建索引库。

PUT /yx

第二步:对索引库添加类型。

PUT yx/_mapping/goods
{"properties": {"title": {"type": "text","index": true,"store": true"analyzer": "ik_max_word"},"images": {"type": "keyword", "index": "false"},"price": {"type": "float","index": true,"store": true}}
}

刚才的案例中我们是把创建索引库和类型分开来做,其实也可以在创建索引库的同时,直接制定索引库中的类型,基本语法见下:

put /索引库名
{"settings": {"索引库属性名": "索引库属性值"},"mappings": {"类型名": {"properties": {"字段名": {"映射属性名": "映射属性值"}}}}
}

演示示例:

PUT /ytx
{"settings": {},"mappings": {"goods": {"properties": {"title": {"type": "text","index": true, "store": true, "analyzer": "ik_max_word"},"images": {"type": "keyword", "index": "false"},"price": {"type": "float", "index": true,"store": true}}}}
}

响应结果:

{"acknowledged": true,"shards_acknowledged": true,"index": "ytx"
}

五. 结语

学完本章节是不是感觉收获满满,关于Elasticsearch中的类型和映射相关的内容咱们就分享到这里。赶紧来回顾下这一章节主要学习的内容,首先我们给大家介绍了如何来创建字段映射,然后重点介绍了在Elasticsearch中几种重要的字段数据类型,最后学习了如何创建索引和类型。内容很多,还需要好好复习回顾哦。

今天的内容就分享到这里吧。关注「袁庭新」,干货天天都不断!

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

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

相关文章

通过VSCode开发Python项目

一、插件准备 Python 插件,必须 autoDocstring 生成注释,和Pycharm一样输入三个引号"""会生产注释结构 Todo Tree 高亮显示 TODO/FIXME 二、python相关设置 一)设置python环境 按"F1"打开命令面板(…

linux服务 宝塔控制面板,宝塔面板打不开,ssh可以链接,输入bt命令没有反应 linux 重启宝塔服务器命令

目录 问题解决方法 问题 1、宝塔面板无法开,显示连接失败 2、bt 没有效果 解决方法 1、第一步、首先执行下面板看看bt文件 ll /etc/init.d/2、第二步、 执行df -h看看磁盘空间 df -hT3、删除旧的宝塔快捷方式 进行备份 mv /etc/init.d/bt /tmp/bt_back4、生成…

【开源】SpringBoot框架开发婚恋交友网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 会员管理模块2.3 新闻管理模块2.4 相亲大会管理模块2.5 留言管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 会员信息表3.2.2 新闻表3.2.3 相亲大会表3.2.4 留言表 四、系统展示五、核心代码5.…

Github 2024-02-24 开源项目日报Top10

根据Github Trendings的统计,今日(2024-02-24统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5TypeScript项目2C项目1Rust项目1JavaScript项目1HTML项目1Jupyter Notebook项目1 Python - 100天…

vue2的ElementUI的form表单报错“Error: [ElementForm]unpected width”修复

1. 问题 ElementUI的form表单,当动态切换显示表单时报错 Error: [ElementForm]unpected width。 翻译过来就是form表单的label宽度width出了问题。 2. 分析 参数说明类型可选值默认值label-width表单域标签的宽度,例如 ‘50px’。作为 Form 直接子元…

Java编程实战:构建医疗信息管理新平台

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

函数式编程

当涉及到Java中Lambda表达式的用法,以下是一个总结,包括了各种常见的使用情境: 基本语法: Lambda表达式的基本语法是 (parameters) -> expression,其中: parameters:Lambda函数的参数列表&am…

Minimize Inversions

先来看看官方题解的做法,他一反常态的没有在逆序对题目里面考虑每个位置的贡献,而是直接回到定义考虑每对数是否是逆序对 我们考虑原数列中任意的一组数\((a_i,a_j)\)和\((b_i,b_j)\)。如果最开始两个都不是逆序对,那么交换之后两个都是逆序对…

无人机竞赛常用目标检测方法--色块检测

本次开源计划主要针对大学生无人机相关竞赛的视觉算法开发。 开源代码仓库链接:https://github.com/zzhmx/Using-color-gamut-limitations-such-as-HSV-and-RGB-for-object-detection.git 主要使用传统算法,如果想要使用进阶版机器学习算法,请…

C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2

目录 效果 项目 代码 下载 C# OpenVINO 百度PaddleSeg实时人像抠图PP-MattingV2 效果 项目 代码 using OpenCvSharp; using Sdcb.OpenVINO; using System; using System.Diagnostics; using System.Drawing; using System.Security.Cryptography; using System.Text; us…

TCP/IP协议详解

文章目录 TCP/IP协议概述基于TCP/IP协议的应用工具协议协议的必要性 TCP/IP协议TCP/IP协议族协议的分层 传输方式的分类报文、帧、数据包等的区别TCP 和 UDP的区别 TCP/IP协议概述 TCP/IP(Transmission Control Protocol/Internet Protocol)是一组通信协…

Window部署SkyWalking

SkyWalking mysql的驱动依赖 选择下载版本 v9.4 现在后解压缩目录结构 一、修改config目录文件 application.yml 修改1: selector: ${SW_STORAGE:h2} 修改后: selector: ${SW_STORAGE:mysql} 修改2:使用mysql数据库 mysql: properti…

K210基础实验——点亮LED灯

一、目的是点亮K210开发板左下角的LED0和LED1,LED0是红灯,LED1是绿灯,两颗LED灯都是低电平点亮,高电平熄灭。 二、这是原理图上的硬件连接,LED0连接的是IO0,LED1连接的是IO17。 三、在src目录下新建文件夹 …

【MATLAB源码-第141期】基于matlab的免疫优化算法在物流配送中心选址应用仿真,输出选址图以及算法适应度曲线。

操作环境: MATLAB 2022a 1、算法描述 免疫优化算法在物流配送中心选址中的应用是一个集成了信息科学、生物学原理和运筹学的跨学科研究领域。本文旨在探讨免疫优化算法在物流配送中心选址问题中的应用,包括算法的基本原理、模型构建、算法实现及其在实…

【畅玩雾锁王国】雾锁王国服务器手动部署教程2024年

阿里云雾锁王国服务器搭建教程是基于计算巢服务,3分钟即可成功创建Enshrouded游戏服务器,阿里云8核32G雾锁王国专用游戏服务器90元1个月、271元3个月,阿里云服务器网aliyunfuwuqi.com亲自整理雾锁王国服务器详细搭建教程: 一、前…

飞行机器人专栏(十三)-- 智能优化算法之粒子群优化算法与多目标优化

一、理论基础 1.1 引言 粒子群优化算法(Particle Swarm Optimization, PSO)自1995年由Eberhart和Kennedy提出以来,已经成为解决优化问题的一种有效且广泛应用的方法。作为一种进化计算技术,PSO受到社会行为模式,特别是…

iOS面试:4.多线程GCD

一、多线程基础知识 1.1 什么是进程? 进程是指在系统中正在运行的一个应用程序。对于电脑而已,你打开一个软件,就相当于开启了一个进程。对于手机而已,你打开了一个APP,就相当于开启了一个进程。 1.2 什么是线程&am…

【四川省计算机学会主办 | 中国科协重要学术会议】人工智能与大数据国际会议(ICAIBD 2024)

ICAIBD 2024https://www.icaibd.org/ 会议简介: 第七届人工智能与大数据国际会议(ICAIBD 2024)将于2024年5月24-27日在中国▪四川▪成都召开。七年来,ICAIBD 2024由四川省计算机学会主办,四川省科学技术协会作为指导单位,四川大…

【微服务生态】Elasticsearch

文章目录 一、概述二、下载和部署2.1 单机部署2.2 集群部署2.2.1 环境配置2.2.2 安装及部署 三、基本操作3.1 概述3.2 HTTP 操作3.2.1 索引操作3.2.2 文档操作3.2.3 关系映射3.2.4 高级查询 3.3 Java API 操作 四、Elasticsearch 进阶4.1 核心概念4.2 系统架构4.3 分布式集群4.…

解决Maven爆红以及解决 Idea 卡在 Resolving问题

关于 Idea 卡在 Resolving(前提是Maven的setting.xml中配置好了阿里云和仓库) 参考文章https://blog.csdn.net/jiangyu1013/article/details/95042611 解决Maven爆红参考文章https://devpress.csdn.net/beijing/656d993b76f0791b6eca7bb0.html?dp_toke…
推荐文章