63.es中的type数据类型

主要知识点

  • 理解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中是空值,会有严重的性能问题。

原文地址:https://www.cnblogs.com/liuqianli/p/8475477.html

时间: 2024-07-30 18:43:56

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

ES中index和type区分

参考: https://bayescafe.com/database/elasticsearch-using-index-or-type.html https://www.cnblogs.com/huangfox/p/9460361.html elasticsearch-中的索引与类型的前生今世 1. type理解 1.1 Type 是什么 使用 type 允许我们在一个 index 里存储多种类型的数据,这样就可以减少 index 的数量了.在使用时,向每个文档加入 _type 字段,在指定

向elasticsearch中动态添加字段报错问题和向elasticsearch中添加嵌套数据类型数据--工作学习记录

今天在对已有的es库中进行update操作时发现update操作失败(提示说是操作不允许).然后发现原因是:es中type的“dynamic”属性为“strict”. 然后感觉有两种方法解决: 1.向type中新增字段,再动态添加 2.修改es中dynamic属性为true(这种的话改动太大就算了) 之后我就通过第一种方法进行解决.但是,要添加的数据类型是嵌套数据类型. 如果就像普通的数据那样进行添加的话,es引擎内部会把对象数组展开成扁平的数据结构,数据之间的依赖关系会丢失. 例如:"tag&

MySql中的字符数据类型

MySql中的varchar类型 1.varchar类型的变化 MySQL数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255根据不同版本数据库来定.在MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可 以存放65532个字节的数据, 起始位和结束位占去了3个字节,也就是说,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文

Java中的基本数据类型

Java中的基本数据类型分四类八种 byte(Byte-1)/short(Short-2)/int(Integer-4)/long(Long-8) boolean(Boolean-1bit) char(Character-2) float(Float-4)/double(Double-8) 括号后是他们的包装类和所占字节大小(Java中的基本数据类型所占字节大小是固定的,和C/C++中不一样) 基本数据类型的默认值: Data Type Default Value (for fields) by

OpenCV 中 IplImage、CvMat、Mat中的type是怎么回事?

在使用opencv的过程中,无论使用原始的IplImage和CvMat类型,还是用最新C++版本的Mat类型,在创建和使用过程中,经常会遇到CV_8UC1.CV_8UC3.CV_32FC3等声明,我以前也经常遇到,曾经看懂了,现在又忘记了,现在把它写下来,方便以后查看,遇到同样问题的菜鸟也能尽快理解这些声明是怎么回事. 先把opencv源代码贴出来 #define CV_CN_MAX 512 #define CV_CN_SHIFT 3 #define CV_DEPTH_MAX (1 << CV

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

一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0 int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0 long:长整型,在内存中占64位,即8个字节-2^63~2^63-1,默认值0L float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数

python中的特殊数据类型

一.python中的特殊数据类型 对于python,一切事物都是对象,对象基于类创建.像是"wangming",38,[11,12,22]均可以视为对象,并且是根据不同的类生成的对象. 参照:http://www.cnblogs.com/wupeiqi/articles/4911365.html 1.列表 如[12,12,23].['wan','fad','dfjap]等 列表具备的功能: class list(object): """ list() -&

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

[.net 面向对象编程基础] (3) 基础中的基础——数据类型 关于数据类型,这是基础中的基础. 基础..基础..基础.基本功必须要扎实. 首先,从使用电脑开始,再到编程,电脑要存储数据,就要按类型存储,就跟我们买来衣服一样,裤子,上衣,冬天的,夏天的,总要分个类再放进衣柜中一样.越是高级的编程语言,数据类型分的越详细. 问题来了,这么多数据类型,我们是不是要一一记住,这真不是个省心的事情,不用怕,不用怕,不用怕,重要的事情说三遍. 重点:C#就15种数据类型. 准确来说,是15种预定义类型,

数据处理程序语言中的基本数据类型

程序语言根据其设计目的不同,其侧重的基本数据类型也不同.JAVA.C#等语言被设计用来进行通用的应用程序开发,其基本数据类型是字符串.数字.布尔等原子数据类型,以及数组和通用对象.而SQL.PowerBuilder.R.集算器esProc等语言被设计用来进行数据处理,其基本数据类型是有结构的二维数据表对象.比如这句SQL:SELECT T1.id,T1.name,T1.value FROM T1 LEFT JOIN T2 ON T1.id=T2.id,这里的T1,T2以及计算结果就是这种数据类型