Elasticsearch-使用映射来定义各种文档
ES-使用映射来定义各种文档
每篇文档属于一种类型,而每种类型属于一个索引。从数据的逻辑划分来看,可以认为索引是数据库,而类型是数据库中的表。
类型包含了映射中每个字段的定义。映射包括了该类型的文档中可能出现的所有字段,并告诉ES如何索引一篇文档的多个字段。
类型只提供逻辑上的分离:
在ES中,不同类型的文档没有物理上的分离。在同一个ES索引中的所有文档,无论何种类型,都是存储在属于相同分片的同一组文件中。一份分片就是一个Lucene的索引,类型的名称是Lucene索引中一个字段。所有映射的所有字段都是Lucene索引中的字段。
类型的概念是针对ES的一层抽象,但不属于Lucene。可以轻松地在同一个索引中拥有不同类型的文档。ES负责分离这些文档,在某个类型中搜索时,ES会过滤出属于哪个类型的文档。
当多个类型中出现同样的字段名称时,两个同名的字段应该有同样的设置。否则,ES将很难分辨查询时指的是两个字段中的哪一个。两个字段都是属于同一个Lucene索引。

group(分组)和event(活动)存储在不同的类型中。ES允许在一个类型、多个类型中搜索。
1. 检索和定义映射
1.1获取目前的映射
为了查看某个字段类型当前的映射,向该类型URL的_mapping接口发送一个HTTP GET请求
FengZhendeMacBook-Pro:bin FengZhen$ curl 'localhost:9200/music/singer/_mapping?pretty'
{
"music" : {
"mappings" : {
"singer" : {
"properties" : {
"level" : {
"type" : "string"
},
"name" : {
"type" : "string"
}
}
}
}
}
}
新建一个专辑类型album,并索引一篇新文档
FengZhendeMacBook-Pro:bin FengZhen$ curl -XPUT 'localhost:9200/music/album/1' -d '{
> "name":"八度空间",
> "date":"2003-10-25T19:00"
> }'
获取当前类型映射
FengZhendeMacBook-Pro:bin FengZhen$ curl 'localhost:9200/music/album/_mapping?pretty'
{
"music" : {
"mappings" : {
"album" : {
"properties" : {
"date" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
},
"name" : {
"type" : "string"
}
}
}
}
}
}
可看到date字段自动识别为日期类型
1.2定义新的映射
在索引music的album类型中,新增一个字段映射singer,类型为string
FengZhendeMacBook-Pro:bin FengZhen$ CURL -XPUT 'localhost:9200/music/_mapping/album' -d '{
> "album":{
> "properties":{
> "singer":{
> "type":"string"
> }
> }
> }
> }'
查看album的映射
FengZhendeMacBook-Pro:bin FengZhen$ curl 'localhost:9200/music/album/_mapping?pretty'
{
"music" : {
"mappings" : {
"album" : {
"properties" : {
"date" : {
"type" : "date",
"format" : "strict_date_optional_time||epoch_millis"
},
"name" : {
"type" : "string"
},
"singer" : {
"type" : "string"
}
}
}
}
}
}
2.扩展现有的映射
如果在现有的基础上再设置一个映射,ES会将两者合并。如上述映射,包含两个来自初始映射的字段,外加定义的一个新字段。随着新字段的加入,初始的映射被扩展了,在任何时候都可以进行这样的操作,ES将次称为现有映射和先前提供的映射的合并。
但是,并非所有的合并都是奏效的,例如:无法改变现有字段的数据类型,而且通常无法改变一个字段被索引的方式。
试图改变singer类型为long,操作会失败并抛出异常
FengZhendeMacBook-Pro:bin FengZhen$ CURL -XPUT 'localhost:9200/music/_mapping/album?pretty' -d '{
> "album":{
> "properties":{
> "singer":{
> "type":"long"
> }
> }
> }
> }'
{
"error" : {
"root_cause" : [ {
"type" : "illegal_argument_exception",
"reason" : "mapper [singer] of different type, current_type [string], merged_type [long]"
} ],
"type" : "illegal_argument_exception",
"reason" : "mapper [singer] of different type, current_type [string], merged_type [long]"
},
"status" :
}
避免这个错误唯一的方法是重新索引album里的所有数据,步骤如下
(1) 将album类型里的所有数据删除。
(2) 设置新的映射
(3) 再次索引所有的数据
Elasticsearch-使用映射来定义各种文档的更多相关文章
- Elasticsearch配置详解、文档元数据
目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 1.Elasticsearch配置文件详解 a. 在上面博客中,我们已经安装并且成功 ...
- ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理
分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...
- ElasticSearch权威指南学习(文档)
什么是文档 在Elasticsearch中,文档(document)这个术语有着特殊含义.它特指最顶层结构或者根对象(root object)序列化成的JSON数据(以唯一ID标识并存储于Elasti ...
- ES入门三部曲:索引操作,映射操作,文档操作
ES入门三部曲:索引操作,映射操作,文档操作 一.索引操作 1.创建索引库 #语法 PUT /索引名称 { "settings": { "属性名": " ...
- ElasticSearch查询 第二篇:文档更新
<ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...
- ElasticSearch(二):文档的基本CRUD与批量操作
ElasticSearch(二):文档的基本CRUD与批量操作 学习课程链接<Elasticsearch核心技术与实战> Create 文档 支持自动生成文档_id和指定文档_id两种方式 ...
- Es图形化软件使用之ElasticSearch-head、Kibana,Elasticsearch之-倒排索引操作、映射管理、文档增删改查
今日内容概要 ElasticSearch之-ElasticSearch-head ElasticSearch之-安装Kibana Elasticsearch之-倒排索引 Elasticsearch之- ...
- ElasticSearch 5学习(8)——分布式文档存储(wait_for_active_shards新参数分析)
学完ES分布式集群的工作原理以及一些基本的将数据放入索引然后检索它们的所有方法,我们可以继续学习在分布式系统中,每个分片的文档是被如何索引和查询的. 路由 首先,我们需要明白,文档和分片之间是如何匹配 ...
- Elasticsearch简介、倒排索引、文档基本操作、分词器
lucene.Solr.Elasticsearch 1.倒排序索引 2.Lucene是类库 3.solr基于lucene 4.ES基于lucene 一.Elasticsearch 核心术语 特点: 1 ...
随机推荐
- C#写入文件内容时提示:文件正被另一个人或程序使用
创建文件后未将文件关闭 string sTransLogFile = sTransLogPath + "\\" + DateTime.Now.ToString("yyyy ...
- CF1101D GCD Counting 点分治+质因数分解
题意:求最长的树上路径点值的 $gcd$ 不为 $1$ 的长度. 由于只要求 $gcd$ 不为一,所以只要 $gcd$ 是一个大于等于 $2$ 的质数的倍数就可以了. 而我们发现 $2\times 1 ...
- javascript中继承方式及优缺点(三)
文以<JavaScript高级程序设计>上的内容为骨架,补充了ES6 Class的相关内容,从我认为更容易理解的角度将继承这件事叙述出来,希望大家能有所收获. 1. 继承分类 先来个整体印 ...
- TensorFlow使用记录 (一): 基本概念
基本使用 使用graph来表示计算任务 在被称之为Session的上下文中执行graph 使用tensor表示数据 通过Variable维护状态 使用feed和fetch可以为任意的操作(op)赋值或 ...
- 【CF1262F】Wrong Answer on test 233(数学)
题意:给定n道题目,每道题目有k个选项,已知所有正确选项,选对1题得1分 问循环后移一格后总得分s2大于原先总得分s1的方案数 n<=2e5,1<=k<=1e9 思路:特判k=1 e ...
- 【转】稳定婚姻问题(Stable Marriage Problem)
转自http://www.cnblogs.com/drizzlecrj/archive/2008/09/12/1290176.html 稳定婚姻是组合数学里面的一个问题. 问题大概是这样:有一个社团里 ...
- Aragorn's Story
A - Aragorn's Story 直接套 线段树+树剖 板子 代码: // Created by CAD on 2019/8/12. #include <bits/stdc++.h> ...
- Linux下kafka集群的搭建
上一篇日志已经搭建好了zookeeper集群,详细请查看:http://www.cnblogs.com/lianliang/p/6533670.html,接下来继续搭建kafka的集群 1.首先下载k ...
- H5视频活动踩坑
最近做了一些嵌入视频的活动,积累了点视频方面的经验,下面记录下别人和自己踩过的坑以及相应的解决方案.1.碰到问题和解决方案1.1.ios 网页中播放视频默认全屏(点击视频会弹出播放器进行全屏播放).解 ...
- _parameter:解决There is no getter for property named in class java.lang.String
我们知道在mybatis的映射中传参数,只能传入一个.通过#{参数名} 即可获取传入的值. Mapper接口文件: public int delete(int id) throws Exception ...