elasticsearch 之 深入探秘type底层数据结构
1、理论知识
type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器。
field的value,在底层的lucene中建立索引的时候,全部是opaque(不透明) bytes类型,即:不区分类型的。
lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即_type,es通过_type来进行type的过滤和筛选。
一个index中的多个type,实际上是放在一起存储的,因此一个index下,不能有多个type重名,而类型或者其他设置不同的,因为那样是无法处理的。
2、案例实战
(1)插入两条数据
PUT goods_index/electronic_goods/1
{
"name": "geli kongtiao",
"price": 1999.0,
"service_period": "one year"
}
PUT goods_index/eat_goods/2
{
"name": "aozhou dalongxia",
"price": 199.0,
"eat_period": "one week"
}
索引名称为goods_index
在改索引下面分别有两个type electronic_goods和eat_goods
我们来看索引对于的映射
()查看mapping
GET /goods_index/_mapping
{
"goods_index": {
"mappings": {
"electronic_goods": {
"properties": {
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above":
}
}
},
"price": {
"type": "float"
},
"service_period": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above":
}
}
}
}
},
"eat_goods": {
"properties": {
"eat_period": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above":
}
}
},
"name": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above":
}
}
},
"price": {
"type": "float"
}
}
}
}
}
}
一个index中的多个type,实际上是放在一起存储的,在Lucene底层的存储结构如下
()lucene 底层的存储
{
"ecommerce": {
"mappings": {
"_type": {
"type": "string",
"index": "not_analyzed"
},
"name": {
"type": "string"
}
"price": {
"type": "double"
}
"service_period": {
"type": "string"
}
"eat_period": {
"type": "string"
}
}
}
}
上述两条数据在底层存储结构如下:
{
"_type": "elactronic_goods",
"name": "geli kongtiao",
"price": 1999.0,
"service_period": "one year",
"eat_period": ""
}
{
"_type": "fresh_goods",
"name": "aozhou dalongxia",
"price": 199.0,
"service_period": "",
"eat_period": "one week"
}
_type字段就是type的名称,两个type中都有name字段,这里两个type中同有name字段,以为type同享一个存储空间,如果
elactronic_goods中的name为data类型,
fresh_goods中name为text类型,如果二者的类型不一样,这里就会存在问题 lucen底层的数据结构会将"elactronic_goods"和fresh_goods的字段取并接存储起来
将类似结构的type放在一个index下,这些type应该有多个field是相同的。假如说,你将两个type的field完全不同,放在一个index下,那么就每条数据都至少有一半的field在底层的lucene中是空值,会有严重的性能问题。
"elactronic_goods"
elasticsearch 之 深入探秘type底层数据结构的更多相关文章
- ES 14 - (底层原理) Elasticsearch内部如何处理不同type的数据
目录 1 type的作用 2 type的底层数据结构 3 探究type的存储结构 3.1 创建索引并配置映射 3.2 添加数据 3.3 查看存储结构 4 关于type的最佳实践 1 type的作用 在 ...
- ElasticSearch(二十七)type的数据结构
1.什么是type? type,是一个index中用来区分类似的数据的,类似的数据,但是可能有不同的fields,而且有不同的属性来控制索引建立.分词器field的value,在底层的lucene中建 ...
- 深入浅出Redis-redis底层数据结构(上)
1.概述 相信使用过Redis 的各位同学都很清楚,Redis 是一个基于键值对(key-value)的分布式存储系统,与Memcached类似,却优于Memcached的一个高性能的key-valu ...
- 深入理解Redis:底层数据结构
简介 redis[1]是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
- Redis 概念以及底层数据结构
Redis 简介 REmote DIctionary Server(Redis) 是一个由SalvatoreSanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C ...
- redis基本数据类型和对应的底层数据结构
Redis的数据类型包含string,list,hash,set,sorted set. Redis中定义了一个对象的结构体: /* * Redis 对象 */ typedef struct redi ...
- Redis(二)--- Redis的底层数据结构
1.Redis的数据结构 Redis 的底层数据结构包含简单的动态字符串(SDS).链表.字典.压缩列表.整数集合等等:五大数据类型(数据对象)都是由一种或几种数结构构成. 在命令行中可以使用 OBJ ...
- Redis 的底层数据结构(对象)
目前为止,我们介绍了 redis 中非常典型的五种数据结构,从 SDS 到 压缩列表,这都是 redis 最底层.最常用的数据结构,相信你也掌握的不错. 但 redis 实际存储键值对的时候,是基于对 ...
- Redis底层数据结构详解
上一篇说了Redis有五种数据类型,今天就来聊一下Redis底层的数据结构是什么样的.是这一周看了<redis设计与实现>一书,现来总结一下.(看书总是非常烦躁的!) Redis是由C语言 ...
随机推荐
- [微信营销企划之路]001.环境搭建(XAMPP+WeiPHP)
引言 本系列适合0基础的人员,因为我们就是从0开始的,此系列记录我们步入微信营销企划并进行开发的一些经验分享,望与君共勉!作为刚刚踏入微信队伍中的新人的我们,如果有什么不对的地方,还望不吝赐教. 在开 ...
- XMLHttpRequest实现Ajax &数据格式JSON
GET请求 index <%@ page language="java" contentType="text/html; charset=utf-8" p ...
- 【转】roc曲线与auc值
https://www.cnblogs.com/gatherstars/p/6084696.html ROC的全名叫做Receiver Operating Characteristic,其主要分析工具 ...
- java的Interger自动包装带来的问题
1 首先看一下以下代码: Integer b=7; Integer c=7; Integer r=234; Integer d=234; System.out.println(b==c); Syste ...
- 02 . Python之数据类型
Python入门之数据类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间.基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数 ...
- 04 . Nginx的Rewrite重写
Rewrite简介 # Rewrite对应URL Rewrite,即URL重写,就是把传入web的请求重定向到其他URL的过程. # 当运维遇到要重写情况时,往往是要程序员把重写规则写好后,发给你,你 ...
- Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪
试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ...
- Java实现 蓝桥杯VIP 算法训练 ALGO-85进制转换
问题描述 编写一个程序,输入一个二进制的字符串(长度不超过32),然后计算出相应的十进制整数,并把它打印出来. 输入格式:输入为一个字符串,每个字符都是'0'或'1',字符串的长度不超过32. 输出格 ...
- Java实现 LeetCode 111 二叉树的最小深度
111. 二叉树的最小深度 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...
- java实现第八届蓝桥杯数位和
数位和 题目描述 数学家高斯很小的时候就天分过人.一次老师指定的算数题目是:1+2+-+100. 高斯立即做出答案:5050! 这次你的任务是类似的.但并非是把一个个的数字加起来,而是对该数字的每一个 ...