Elasticsearch-mapping

news2025/3/13 8:40:12

1.Mapping基本概念

Mapping 也称之为映射,定义了 ES 的索引结构、字段类型、分词器等属性,是索引必不可少的组成部分。

ES 中的 mapping 有点类似与RDB中“表结构”的概念,在 MySQL 中,表结构里包含了字段名称,字段的类型还有索引信息等。在 Mapping 里也包含了一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性,并且在ES中一个字段可以有对个类型。分词器、评分等概念在后面的课程讲解。- binary:Base64 字符串二进制值
- boolean:布尔类型,接收 ture 和 false 两个值
- alias:字段别名

2.查看索引 mapping

2.1查看完整 mapping

GET /index/_mappings

2.2查看指定字段 mapping 

GET /index/_mappings/field/<field_name>

3. Elasticsearch的数据类型

3.1 数字类型

- long:64 位有符号整形
- integer:32 位有符号整形
- short:16 位有符号整形
- byte:8位有符号整形
- double:双精度 64位浮点类型
- float:单精度 64位浮点类型
- half_float:半精度 64位浮点类型
- scaled_float:缩放类型浮点数,按固定 double 比例因子缩放
- unsigned_long:无符号 64 位整数。

3.2 基本数据类型

- binary:Base64 字符串二进制值
- boolean:布尔类型,接收 ture 和 false 两个值
- alias:字段别名

3.3Keywords 类型 

- keyword:适用于索引结构化的字段,可以用于过滤、排序、聚合。keyword类型的字段只能通过精确值搜索到。如 Id、姓名这类字段应使用 keyword
- constant_keyword:始终包含相同值的关键字字段
- wildcard:可针对类似 grep 的

3.4 Dates(时间类型) 

date:JSON 没有日期数据类型,因此 Elasticsearch 中的日期可以是以下三种
  包含格式化日期的字符串,例如 "2015-01-01"、 "2015/01/01 12:10:30"
  时间戳,表示*自"1970年 1 月 1 日"以来的毫秒*数/秒数。
date_nanos:此数据类型是对 date 类型的补充。但是有一个重要区别。date 类型存储最高精度为毫秒,而date_nanos 类型存储日期最高精度是纳秒,但是高精度意味着可存储的日期范围小,即:从大约 1970 到 2262,因为日期仍存储为表示纳秒的长 自时代以来。

 3.5 对象类型

object:非基本数据类型之外,默认的 json 对象为 object 类型。
flattened:单映射对象类型,其值为 json 对象。
nested ★:嵌套类型。
join:父子级关系类型。

3.6 空间数据类型 

dense_vector:记录浮点值的密集向量。
rank_feature:记录数字特征以提高查询时的命中率。
rank_features:记录数字特征以提高查询时的命中率。

3.7 文档排名类型

dense_vector:记录浮点值的密集向量。
rank_feature:记录数字特征以提高查询时的命中率。
rank_features:记录数字特征以提高查询时的命中率。

3.8 文本搜索类型 

text:文本类型

annotated-text:包含特殊文本 标记。用于标识命名实体。
completion★:用于自动补全,即搜索推荐
search_as_you_type:类似文本的字段,经过优化 为提供按类型完成的查询提供现成支持 用例
token_count:文本中的标记计数。

4. 两种映射类型

4.1 自动映射:Dynamic field mapping

4.1.1自动映射的关系

field typedynamic
true/falseboolean
小数float
数字long
objectobject
数组取决于数组中的第一个非空元素的类型
日期格式字符串date
数字类型字符串float/long
其他字符串text + keyword

除了上述字段类型之外,其他类型都必须显示映射,也就是必须手工指定,因为其他类型ES无法自动识别。

4.2.2直接查询一个没有mapping的是查询不到的 

 

 4.2.3直接创建mapping直接就会成功,并且还能查到

 

 4.2.4text类型会自动创建子字段,类型都是keyword,ignore_above表示字段长度超过256就会被忽略

4.2 显示映射 Expllcit field mapping

PUT /product
{
      "mappings" : {
      "properties" : {
        "productyou" : {
          "type" : "text"
          
        },
        "name":{
          "type": "text",
          "fields": {
            "name-2":{
              "type":"keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
}

5、映射参数

index:是否对创建对当前字段创建倒排索引,默认 true,如果不创建索引,该字段不会通过索引被搜索到,但是仍然会在 source 元数据中展示

创建索引

PUT test_parms
{
  "mappings": {
    "properties": {
      "test_index": {
        "type": "text",
        "index": false
      }
    }
  }
}

 放入数据

PUT test_parms/_doc/1
{
  "test_index":"是否对创建对当前字段创建倒排索引,默认 true,如果不创建索引,该字段不会通过索引被搜索到,但是仍然会在 source 元数据中展示"
}

 直接查询是可以查到数据的

GET test_parms/_search

 通过索引查询就查不到了

GET test_parms/_search
{
  "query": {
    "match": {
      "test_index": "是否对创建对当前字段创建倒排索引,默认 true,如果不创建索引,该字段不会通过索引被搜索到,但是仍然会在 source 元数据中展示"
    }
  }
}

 
analyzer:指定分词器(character filter、tokenizer、Token filters)。针对元数据
boost:对当前字段相关度的评分权重,默认1
coerce:是否允许强制类型转换  true “1”=> 1  false “1”=< 1
copy_to:该参数允许将多个字段的值复制到组字段中,然后可以将其作为单个字段进行查询
doc_values:为了提升排序和聚合效率,默认true,如果确定不需要对字段进行排序或聚合,也不需要通过脚本访问字段值,则可以禁用doc值以节省磁盘空间(不支持text和annotated_text)
dynamic:控制是否可以动态添加新字段
        true 新检测到的字段将添加到映射中。(默认)
        false新检测到的字段将被忽略。这些字段将不会被索引,因此将无法搜索,但仍会出现在_source返回的匹配项中。这些字段不会添加到映射中,必须显式添加新字段。
strict 如果检测到新字段,则会引发异常并拒绝文档。必须将新字段显式添加到映
eager_global_ordinals:用于聚合的字段上,优化聚合性能,但不适用于 Frozen indices。
Frozen indices(冻结索引):有些索引使用率很高,会被保存在内存中,有些使用率特别低,宁愿在使用的时候重新创建,在使用完毕后丢弃数据,Frozen indices 的数据命中频率小,不适用于高搜索负载,数据不会被保存在内存中,堆空间占用比普通索引少得多,Frozen indices是只读的,请求可能是秒级或者分钟级。
enable:是否创建倒排索引,可以对字段操作,也可以对索引操作,如果不创建索引,让然可以检索并在_source元数据中展示,谨慎使用,该状态无法修改。

PUT my_index
{
  "mappings": {
      "enabled": false
  }
}

fielddata:查询时内存数据结构,在首次用当前字段聚合、排序或者在脚本中使用时,需要字段为fielddata数据结构,并且创建倒排索引保存到堆中
fields:给field创建多字段,用于不同目的(全文检索或者聚合分析排序)
format:格式化

"date": {
   "type":  "date",
   "format": "yyyy-MM-dd"
}

ignore_above:超过长度将被忽略
ignore_malformed:忽略类型错误
-index_options:控制将哪些信息添加到反向索引中以进行搜索和突出显示。仅用于text字段
Index_phrases:提升 exact_value 查询速度,但是要消耗更多磁盘空间
index_prefixes**:前缀搜索
min_chars:前缀最小长度,> 0,默认 2(包含)
max_chars:前缀最大长度,< 20,默认 5(包含)
meta:附加元数据
normalizer:
norms:**是否禁用评分(在 filter 和聚合字段上应该禁用)。
null_value:为 null 值设置默认值
position_increment_gap:参考 [match_phrase 跨值查询中 position_increment_gap 参数用法](https://blog.csdn.net/wlei0618/article/details/128189190)
proterties:除了mapping还可用于object的属性设置
search_analyzer:设置单独的查询时分析器:用户输入的
similarity:为字段设置相关度算法,支持BM25、classic(TF-IDF)、boolean
store:设置字段是否仅查询
erm_vector:运维参数,会在进阶课程中深入讲解

6.Text 和 Keyword 类型

6.1概述

当一个字段是要被全文搜索的,比如 Email 内容、产品描述,这些字段应该使用 text 类型。设置  text 类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。

6.2注意事项

- 适用于全文检索:如 match 查询
- 文本字段会被分词
- 默认情况下,会创建倒排索引
- 自动映射器会为 Text 类型创建 Keyword 字段

6.3 Keyword 类型

6.3.1概述

Keyword 类型适用于不分词的字段,如姓名、Id、数字等。如果数字类型不用于范围查找,用 Keyword 的性能要高于数值类型。

6.3.2语法和语义

如当使用 keyword 类型查询时,其字段值会被作为一个整体,并保留字段值的原始属性。

GET test_index/_search
{
  "query": {
    "match": {
      "title.keyword": "测试文本值"
    }
  }
}

6.3.3注意事项

- Keyword 不会对文本分词,会保留字段的原有属性,包括大小写等。
- Keyword 仅仅是字段类型,而不会对搜索词产生任何影响
- Keyword 一般用于需要精确查找的字段,或者聚合排序字段
- Keyword 通常和 Term 搜索一起用(会在 DSL 中提到)
- Keyword 字段的 ignore_above 参数代表其截断长度,默认 256,如果超出长度,字段值会被忽略,而不是截断。

 7.映射模板

7.1简介

之前讲过的映射类型或者字段参数,都是为确定的某个字段而声明的,如果希望对符合某类要求的特定字段制定映射,就需要用到映射模板:Dynamic templates。

映射模板有时候也被称作:自动映射模板、动态模板等。

7.2基本语法

"dynamic_templates": [
    {
      "my_template_name": { 
        ... match conditions ... 
        "mapping": { ... } 
      }
    },
    ...
]

7.3Conditions参数

match_mapping_type:主要用于对数据类型的匹配
match 和 unmatch:用于对字段名称的匹配

PUT test_dynamic_template
{
  "mappings": {
    "dynamic_templates": [
      {
        "integers": {
          "match_mapping_type": "long",
          "mapping": {
            "type": "integer"
          }
        }
      },
      {
        "longs_as_strings": {
          "match_mapping_type": "string",
          "match": "num_*",
          "unmatch": "*_text",
          "mapping": {
            "type": "keyword"
          }
        }
      }
    ]
  }
}

以上代码会产生以下效果:

- 所有 long 类型字段会默认映射为 integer
- 所有文本字段,如果是以 num_ 开头,并且不以 _text 结尾,会自动映射为 keyword 类型

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

# IMAGE - Image Perimeters

# IMAGE - Image Perimeters ## 题面翻译 ### 描述 给出一张由"x"和"."组成的矩阵。每个"x"可以向上下左右及两个斜对角进行连通&#xff0c;请问由某个点开始的"x"&#xff0c;它所连通的图形的周长为多少。 ### 输入 整个测试有多…

SpringBoot 整合ChatGPT API项目实战

准备工作 &#xff08;1&#xff09;已成功注册 OpenAI 的账号。 &#xff08;2&#xff09;创建 API KEY&#xff0c;这个 API KEY 是用于 HTTP 请求身份验证的&#xff0c;可以创建多个。 注意这个创建之后需要马上复制好保存&#xff0c;关闭弹框之后就看不到了。 &#xf…

excel的导入导出的两种方案 (1 EasyExcel 2 Hutool工具类)

文章目录 前言1 EasyExcel的导入导出导出1 导入依赖2 项目中的CourseEntity实体类3 CoureseVo VO类 (对CourseEntity进行EasyExcel导入导出操作)4 导出代码的编写 并最终测试导出效果5 (前端内容 可选)通过vue按钮点击 导出 导入1 导入依赖 跟导出相同2 创建回调监听器3 编写导…

1、Typescript基础入门与环境搭建

1、开发工具安装与基本配置 1.1、软件下载安装 如果你还没有使用过VSCode&#xff0c;当然先要去官网下载了。下载完成后双击安装&#xff0c;一直下一步即可。 1.2、编辑器汉化 如果你英语不是很好&#xff0c;配置中文版界面是很有必要的&#xff0c;安装个插件就可以了。打…

虚化背景 - 基于镜头模糊滤镜的深度映射

镜头模糊 Lens Blur等滤镜可以使用深度映射 Depth Map来设置像素在视觉上的前后关系。因此&#xff0c;常利用深度映射来创建真实感虚化效果&#xff0c;或者进行超越镜头的任意虚化处理。 ◆ ◆ ◆ 基于 Alpha 通道的深度映射关系 一般可通过建立 Alpha 通道或图层蒙版来创建…

【算法基础】DP第三弹 —— 竞赛篇

一、计数问题 (一)Question 1. 问题描述 2. Input 输入包含多组测试数据。每组测试数据占一行,包含两个整数 a 和 b。当读入一行为 0 0 时,表示输入终止,且该行不作处理。(0 < a, b < 100000000) 3. Output 每组数据输出一个结果,每个结果占一行。每个结果包…

MIPI D-PHYv2.5笔记(21) -- Forward High-Speed Data Transmission Timing

声明&#xff1a;作者是做嵌入式软件开发的&#xff0c;并非专业的硬件设计人员&#xff0c;笔记内容根据自己的经验和对协议的理解输出&#xff0c;肯定存在有些理解和翻译不到位的地方&#xff0c;有疑问请参考原始规范看 DDR时钟差分信号和Data差分信号的时序关系如下图所示…

计及调度经济性的光热电站储热容量配置方法【IEEE30节点】(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …

计算机网络简史

ARPANET的发展 互联网最早的雏形 1931-ARPANET设计 互联网名人堂 1965-packet switching(分包交换) 1969 第一个RFC(Request for Comments)(开始通过APPANET发布)第一个接口信息处理单元&#xff08;Interface Message Processor&#xff09;&#xff08;下图&#xff0c;节…

ChatGPT时代:我们可能站到了自然语言编程的大门口

ChatGPT大火&#xff0c;我现在有种感觉&#xff1a;我们可能站到了自然语言编程的门口&#xff0c;一脚下去&#xff0c;也许能把门踹开。 当然&#xff0c;也可能会踢到一块铁板。 回顾我们的编程之路&#xff0c;基本上就是一个编程门槛不断降低的历史。 最早的一批前辈们…

wireshark抓包工具的使用

前言 ①wireshark是非常流行的网络封包分析软件&#xff0c;功能十分强大。可以截取各种网络封包&#xff0c;显示网络封包的详细信息。 ②使用wireshark的人必须了解网络协议&#xff0c;否则就看不懂wireshark。 ③为了安全考虑&#xff0c;wireshark只能查看封包&#xff…

【Linux】进程通信之管道通信详解

&#x1f34e;作者&#xff1a;阿润菜菜 &#x1f4d6;专栏&#xff1a;Linux系统编程 一、什么是管道通信 1. 管道通信是一种在进程间传递数据的方法 其实管道通信是Unix中最古老的进程间通信的形式了&#xff1a; 管道通信是一种进程间通信的方式&#xff0c;它可以让一个进…

聚观早报|马斯克将TruthGPT挑战ChatGPT;腾讯披露自研芯片新进展

今日要闻&#xff1a;马斯克将TruthGPT挑战ChatGPT&#xff1b;苹果在印度年销售额近60亿美元&#xff1b;腾讯披露自研芯片沧海最新进展&#xff1b;特斯拉中国工厂普通工人月薪约1万元&#xff1b;飞猪将直接向阿里CEO张勇汇报 马斯克将TruthGPT挑战ChatGPT 4 月 18 日消息&…

Pytorch深度学习笔记(四)梯度向下算法

课程推荐&#xff1a;03.梯度下降算法_哔哩哔哩_bilibili 优化问题&#xff1a;求误差值函数最小的权重w &#xff08;1&#xff09;梯度向下算法思想 在绝大多数的情况下&#xff0c;损失函数是很复杂的&#xff08;比如逻辑回归&#xff09;&#xff0c;根本无法得到参数估计…

从输入url到页面展现(三)通过DNS将域名解析为IP地址以及dns-prefetch的好处

前言 上一节我们用直白的话讲了一下浏览器解析url&#xff0c;而浏览器并不具备发送网络消息的能力&#xff0c;所以委托操作系统发送&#xff0c;而这里的第一步&#xff0c;就是去找到对应web服务器的ip地址&#xff0c;并且对互联网和小子网有了一个认识。 这一节呢说一下我…

换个角度使用Redis去解决跨域存取Session问题

系列文章目录 Redis缓存穿透、击穿、雪崩问题及解决方法 Spring Cache的使用–快速上手篇 分页查询–Java项目实战篇 全局异常处理–Java实战项目篇 该系列文章持续更新&#xff0c;更多的文章请点击我的主页查看哦&#xff01; 文章目录 系列文章目录前言一、遇到的情况二、解…

golang 云效私有模块依赖拉取配置

相关文档 阿里官方文档 go 环境变量配置 export GOPRIVATEcodeup.aliyun.com 凭证设置 非常找重要,https密码配置克隆账户和克隆密码后续会用到 在 可以在 netrc 文件中指定凭据 Linux\MacOS 文件应该存放在执行账户的根目录下&#xff0c;即&#xff1a;~/.netrc sudo v…

SAS 9.3软件安装包下载及安装教程 办公软件

SAS 9.3软件简介&#xff1a; SAS 9.3是目前行业软件中的一款专业的数据统计分析软件&#xff0c;其核心功能包括高级分析、商业智能、客户智能、数据管理、风险管理和欺诈与安全智能六大模块&#xff0c;通过sas软件提供创新的分析、商业智能和数据管理软件与服务&#xff0c…

3Dsmax丨3dsmax2016软件下载安装教程 含全版本软件详细安装流程

大家好~随着计算机技术的发展&#xff0c;3D建模在各个行业中被广泛应用。以游戏行业为例&#xff0c;通过3D建模模型制作、灯光制作、材质渲染、细节润色、渲染合成等能够制作出游戏原神、王者荣耀、和平精英、英雄联盟、明日之后、光遇、哈利波特、剑网3、我的世界、第五人格…

SQL——关于bjpowernode.sql的33道经典例题之1-17

目录 1 查询每个部门最高薪水的人员名称 2 查询哪些人的薪水在部门平均薪水之上 3 查询每个部门的平均薪水等级 3.1 每个部门的平均薪水的等级 3.2 每个部门的平均的薪水等级 4 查询最高薪水&#xff08;不用max函数&#xff09; 5 查询平均薪水最高的部门的部门编号 …