主要知识点

  • 理解es中的type数据类型

 
 

一、type的理解

type是一个index中用来区分类似的数据的,但是可能有不同的fields,而且有不同的属性来控制索引建立、分词器。field的value值在底层的lucene中建立索引的时候,全部是opaque bytes类型,不区分类型的。lucene是没有type的概念的,在document中,实际上将type作为一个document的field来存储,即_type,es通过_type来进行type的过滤和筛选。一个index中的多个type,实际上是放在一起存储的,因此一个index下,不能有多个type重名但是类型或其他设置不同,因为那样是无法处理的。

 
 

二、示例

假设有如下一个index

 
 

PUT /goods

{

"ecommerce": {

"mappings": {

"elactronic_goods": {

"properties": {

"name": {

"type": "string",

},

"price": {

"type": "double"

},

"service_period": {

"type": "string"

}                        

}

},

"fresh_goods": {

"properties": {

"name": {

"type": "string",

},

"price": {

"type": "double"

},

"eat_period": {

"type": "string"

}

}

}

}

}

}

有如下两条数据

{

"name": "geli kongtiao",

"price": 1999.0,

"service_period": "one year"

}

{

"name": "aozhou dalongxia",

"price": 199.0,

"eat_period": "one week"

}

 
 

在底层的存储是这样子的:

 
 

{

"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"

}

可以看出,在es内部,会把所有field合并,对于一个type中没有的field就用空值替代。

所以,在一个index下不同type的同名field的类型必须一致,不然就会冲突。

最佳实践,将类似结构的type放在一个index下,这些type应该有多个field是相同的

因此,如果将两个type的field完全不同,放在一个index下,那么就每条数据都至少有一半的field在底层的lucene中是空值,会有严重的性能问题。

63.es中的type数据类型的更多相关文章

  1. ES中index和type区分

    参考: https://bayescafe.com/database/elasticsearch-using-index-or-type.html https://www.cnblogs.com/hu ...

  2. ES 中的那些坑

    数组 1. 数组中的 full-text 字段将被 [analyzed] 2. 数组中[所有元素]的数据类型必须一致 3. 数组的数据类型,以其 [第一个元素]为准 映射 1. 数据类型会自动进行转化 ...

  3. MySql中的字符数据类型

    MySql中的varchar类型 1.varchar类型的变化 MySQL数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255根据不同版本数据库 ...

  4. 类型转换bin()、chr()、ord() 、int()、float()、str()、repr()、bytes()、tuple(s )、 list(s )   、unichr(x ) 、 ord(x )  、 hex(x )  、          type()数据类型查询

    1.bin() 将整数x转换为二进制字符串,如果x不为Python中int类型,x必须包含方法__index__()并且返回值为integer: 参数x:整数或者包含__index__()方法切返回值 ...

  5. [.net 面向对象编程基础] (3) 基础中的基础——数据类型

    [.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型 ...

  6. Elasticsearch入门必备——ES中的字段类型以及常用属性

    使用Elasticsearch时,了解字段的概念,是必不可少的.毕竟无论是es还是传统的数据库,都无法弱化字段的类型. 背景知识 在Es中,字段的类型很关键: 在索引的时候,如果字段第一次出现,会自动 ...

  7. Mssql中一些常用数据类型的说明和区别

    Mssql中一些常用数据类型的说明和区别 1.bigint 占用8个字节的存储空间,取值范围在-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,37 ...

  8. JAVA中分为基本数据类型及引用数据类型

    一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768 ...

  9. 通过cocos2d-x的CCGLProgram和CCShaderCache的实现来分析OpenGL ES中的Shader编程

    在OpenGL ES中,Shader是着色器,包括两种:顶点着色器(Vertex Shader)和片元着色器(Fragment Shader).每个program对象有且仅有一个Vertex Shad ...

随机推荐

  1. 一篇文章贯穿ACE各种发送接收组件 1.2版

    TCP通信过程介绍 首先介绍一下socket通信的基本过程:这里先如果有两个家伙在通信,一个是S.还有一个叫C (1)S打开port监听本地的port看看有没有人来连接: (2)与此同一时候C试图去连 ...

  2. Openstack能解决这些问题吗?请各位大侠一起来讨论

    1.10万规模的虚拟机,每一个虚拟机能够在不论什么一个计算节点上启动,该怎样做?计算,存储,网络都是怎么拉通与配合的? 2.用户怎样自己定义业务网络,怎样解决网络不够用的情况?正常就4096个vlan ...

  3. ElasticSearch源码解析(五):排序(评分公式)

    ElasticSearch源码解析(五):排序(评分公式) 转载自:http://blog.csdn.net/molong1208/article/details/50623948   一.目的 一个 ...

  4. hdu 2846(字典树)

    Repository Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  5. 协同过滤算法中皮尔逊相关系数的计算 C++

    template <class T1, class T2>double Pearson(std::vector<T1> &inst1, std::vector<T ...

  6. 267C

    二分+高斯消元 我们利用物理里的势能来表示,每个点有一个势能h,再由流量守恒可以得到deg[x]*h[x]=sigma(h[y]) 如果x,y之间有边.这个式子是由流量守恒推出的,所以当x=1或n是不 ...

  7. 原生JS---5

    原生js学习笔记5——BOM操作 什么是BOM BOM:Browser Object Model 是浏览器对象模型,浏览器对象模型提供了独立与内容的.可以与浏览器窗口进行互动的对象结构,BOM由多个对 ...

  8. selenium3 + python - xpath定位

    什么是xpath呢? 官方介绍:XPath即为XML路径语言,它是一种用来确定XML1(标准通用标记语言3的子集)文档中某部分位置的语言.反正小编看这个介绍是云里雾里的,通俗一点讲就是通过元素的路径来 ...

  9. Django day07 (一) 模板的导入 母板的继承 静态文件配置

    一:模板的导入 -写一个模板 {% include '模板的名字' %} 二:母板的继承 -写一个母版(可以留多个盒子) {% block 名字 %} / {% endblock %} 三:静态文件配 ...

  10. 使用idea2.5建立maven项目

    使用idea的步骤: 1.建立一个新的maven项目 2.选中maven项目 3.点击next,输入groupID和artifactid 4.点击next  选择projectlocation 5.选 ...