Elasticsearch的mapping讲解
映射是定义文档及其包含的字段的存储和索引方式的过程。
映射定义具有:
- 元字段
元字段用于自定义如何处理关联的文档元数据。包括文档 _index,_id和 _source领域。 - 字段或属性
映射包含properties与文档相关的字段列表。
字段数据类型
每个字段都有一个数据type,可以是:
- 简单类型等text,keyword,date,long, double,boolean或ip。
- 支持JSON的层次结构性质的类型,如 object或nested。
- 或一种特殊类型的像geo_point, geo_shape或completion。
为不同的目的以不同的方式为同一字段建立索引通常很有用。例如,一个string字段可以被索引为text全文搜索的字段,也可以被索引keyword为排序或聚合的字段。或者,您可以使用standard分析器, english分析器和 french分析器为字符串字段建立索引。
防止映射爆炸的设置
在索引中定义太多字段的情况可能导致映射爆炸,从而可能导致内存不足错误和难以恢复的情况。此问题可能比预期的更常见。例如,考虑一种情况,其中插入的每个新文档都引入了新字段。这在动态映射中很常见。每次文档包含新字段时,这些字段最终都会出现在索引的映射中。对于少量数据,这并不担心,但是随着映射的增长,它可能会成为问题。以下设置允许您限制可以手动或动态创建的字段映射的数量,以防止不良文档导致映射爆炸:
index.mapping.total_fields.limit:索引中的最大字段数。字段和对象的映射以及字段别名都计入此限制。默认值为1000。
该限制已到位,以防止映射和搜索变得太大。较高的值可能导致性能下降和内存问题,尤其是在负载较高或资源很少的群集中。
如果增加此设置,建议您也增加该 indices.query.bool.max_clause_count设置,这将限制查询中布尔子句的最大数量。
index.mapping.depth.limit:字段的最大深度,以内部对象的数量衡量。例如,如果所有字段都在根对象级别定义,则深度为1。如果存在一个对象映射,则深度为 2,等等。默认值为20。
index.mapping.nested_fields.limit:nested索引中 最大不同映射的数量,默认为50。
index.mapping.nested_objects.limit:nested单个文档中所有嵌套类型 中JSON对象的最大数量,默认为10000。
index.mapping.field_name_length.limit:设置字段名称的最大长度。默认值为Long.MAX_VALUE(无限制)。此设置实际上不能解决映射爆炸问题,但是如果您想限制字段长度,该设置可能仍然有用。通常不需要设置此设置。除非用户开始添加大量名称很长的字段,否则默认设置是可以的。
动态映射
字段和映射类型在使用之前不需要定义。通过动态映射,仅通过索引文档即可自动添加新的字段名称。可以将新字段添加到顶级映射类型以及内部object 和nested字段中。
可以将动态映射规则配置为自定义用于新字段的映射。
显式映射
您对数据的了解超出了Elasticsearch的猜测,因此尽管动态映射对于入门非常有用,但有时您仍需要指定自己的显式映射。
当你可以创建字段映射创建索引和 字段添加到现有的索引。
使用显式映射创建索引
您可以使用create index API创建带有显式映射的新索引。
PUT /my-index
{
"mappings": {
"properties": {
"age": {
"type": "integer"
},
"email": {
"type": "keyword"
},
"name": {
"type": "text"
}
}
}
}
将字段添加到现有映射
您可以使用放置映射 API将一个或多个新字段添加到现有索引。
以下示例添加employee-id了keyword一个index映射参数值为的字段 false。这意味着该employee-id字段的值已存储,但未索引或不可搜索。
PUT /my-index/_mapping
{
"properties": {
"employee-id": {
"type": "keyword",
"index": false
}
}
}
更新字段的映射
除了支持的映射参数外,您无法更改现有字段的映射或字段类型。更改现有字段可能会使已经建立索引的数据无效。
如果您需要更改字段映射,创建具有正确映射一个新的索引和重新索引的数据转换成指数。
重命名字段会使在旧字段名称下已建立索引的数据无效。而是添加一个alias字段以创建备用字段名称。
查看索引的映射
您可以使用get mapping API查看现有索引的映射。
GET my-index/_mapping
API返回以下响应:
{
"my-index" : {
"mappings" : {
"properties" : {
"age" : {
"type" : "integer"
},
"email" : {
"type" : "keyword"
},
"employee-id" : {
"type" : "keyword",
"index" : false
},
"name" : {
"type" : "text"
}
}
}
}
}
查看特定字段的映射
如果您只想查看一个或多个特定字段的映射,则可以使用get字段映射 API。
如果您不需要索引的完整映射或索引包含大量字段,这将很有用。
以下请求检索该employee-id字段的映射。
GET /my-index/_mapping/field/employee-id
API返回以下响应:
{
"my-index" : {
"mappings" : {
"employee-id" : {
"full_name" : "employee-id",
"mapping" : {
"employee-id" : {
"type" : "keyword",
"index" : false
}
}
}
}
}
}
Elasticsearch的mapping讲解的更多相关文章
- elasticsearch 之mapping
搭好elk 后,有时候会发现kibana 统计数据时,数据类型不对,这个时候就和elasticsearch的mapping有关,虽然我们可以用logstash修改传入es里的数据类型,比如 float ...
- curl方式创建elasticsearch的mapping
curl方式创建elasticsearch的mapping curl -XPUT 'http://192.168.1.105:9200/bank/item2/_mapping' -d '{ " ...
- elasticsearch的mapping映射
Mapping简述 Elasticsearch是一个schema-less的系统,但并不代表no shema,而是会尽量根据JSON源数据的基础类型猜测你想要的字段类型映射.Elasticsearch ...
- ELK学习总结(4-1)elasticsearch更改mapping(不停服务重建索引)
elasticsearch更改mapping(不停服务重建索引)原文 http://donlianli.iteye.com/blog/1924721Elasticsearch的mapping一旦创建, ...
- elasticsearch更改mapping(不停服务重建索引)
转载地址:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearc ...
- elasticsearch更改mapping,不停服务重建索引(转)
原文:http://donlianli.iteye.com/blog/1924721?utm_source=tuicool&utm_medium=referral Elasticsearch的 ...
- 通过Java的Domain类构建ElasticSearch的mapping
通过给定一个Java的class类自行创建ElasticSearch的mapping Order的domain类 public class Order { public String system_i ...
- elasticsearch 修改 mapping
Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段.但现实往往并非如此啊,有时增加一个字段,就好像打了一个补丁,一个可以,但是越补越多,最后自己都觉得 ...
- ElasticSearch(5)-Mapping
一.Mapping概述 映射 为了能够把日期字段处理成日期,把数字字段处理成数字,把字符串字段处理成全文本(Full-text)或精确的字符串值,Elasticsearch需要知道每个字段里面都包含了 ...
随机推荐
- MySQL--数据过滤(AND、OR、IN、NOT操作符)
MySQL允许给出多个WHERE子句.这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用. 1.组合WHERE子句 1.1 AND操作符 SELECT prod_id,prod_pric ...
- day05 Java_循环_基本类型数组
精华笔记: 循环结构: for结构:应用率高.与次数相关的循环 三种循环结构的选择规则: 先看循环是否与次数相关: 若相关----------------------------直接上for 若无关, ...
- Note -「0/1 Fractional Programming」
What is that? Let us pay attention to a common problem that we often meet in daily life: There are \ ...
- python opencv图像识别(相同大小图片)
简介 由于项目需要对比两张相同图片的相似度,因此采用opencv将图片转为灰阶数组,然后对比相应的数组来取相似度,此方法只适用于大小相同的图片,较为局限 # -*- coding: utf-8 -*- ...
- CVI中调用数据库的几点..
1.各类开发工具开发的程序调用数据库,有两种方式:ADO和ODBC. 2.以ODBC方式访问SQL数据库,必须在电脑管理工具----ODBC管理器 中配置TCP/IP项(IP1.IP2.IP3.IPA ...
- SQL注入 基础学习
SQL注入学习笔记 注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有 ...
- 常见docker命令(二)-容器生命周期相关
docker run 命令主要参数-d 后台运行,返回容器id-i 以交互模式运行,通常与-t连用-t 为容器重新分配一个伪输入终端,通常与-i连用-P(大写) 随机端口映射,容器内部端口随机映射到主 ...
- ArkUI 页面路由
很多应用由多个页面组成,不同的页面承担着不一样的功能.比如,从音乐列表页面点击歌曲,跳转到该歌曲的播放界面.开发者需要通过页面路由将这些页面串联起来. 在 js -> default -> ...
- SpringBoot中如何使用自带的定时任务
随便创建一个类,@Component交给spring管理,用注解@EnableScheduling,让定时任务生效 方法上加注解:@Scheduled(cron = "你的cron表达式&q ...
- KingbaseESV8R6等待事件之lwlock buffer_content
前言 等待事件是排查数据库性能的指标之一.简单理解,cpu在处理业务时由于业务逻辑,和不可避免的数据库其他原因造成的前台进程等待,这里的等待事件包含buffer类,io类,以及网络类等等,当我们遇到等 ...