主要知识点

  • 理解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. Chrome development tools学习笔记(3)

    (上次DOM的部分做了些补充,欢迎查看Chrome development tools学习笔记(2)) 利用DevTools Elements工具来调试页面样式 CSS(Cascading Style ...

  2. Codeforces Round #390 (Div. 2) D. Fedor and coupons

    题意:题目简化了就是要给你n个区间,然后让你选出k个区间  使得这k个区间有公共交集:问这个公共交集最大能是多少,并且输出所选的k个区间.如果有多组答案,则输出任意一种.   这题是用优先队列来处理区 ...

  3. 飞信php接口 web service

    <?php /**     ┃      ┃   code is far away from bug with the animal protecting     ┃      ┃  神兽保佑, ...

  4. hdoj--1220--Cube(数学推导)

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

  5. c++ 写进文件并读出

    #include <iostream>#include <fstream>#include <vector>#include <string> int ...

  6. 感知器算法 C++

    We can estimate the weight values for our training data using stochastic gradient descent. Stochasti ...

  7. 排序系列 之 堆排序算法 —— Java实现

       基本概念: 二叉堆是完全二叉树或者是近似完全二叉树. 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆. 当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆. 一般将二叉堆简称 ...

  8. PCB MS SQL 小写转大写

    由于SQL Server允许为小写进入 ,导致数据库中存在小写,在数据集成到MES或ERP时报错,Oracle要求大写导致, 需转换为大写,可通过以下语句,查询所有小写数据,再更新.

  9. Watchcow(欧拉回路)

    http://poj.org/problem?id=2230 题意:给出n个field及m个连接field的边,然后要求遍历每条边仅且2次,求出一条路径来. #include <stdio.h& ...

  10. HDU2186

    2019-05-30 19:31:10 水题 #include <bits/stdc++.h> using namespace std; int main() { int c; scanf ...