一、ES的存储结构

1、索引

es 中存储数据的基本单位,比如说你现在要在 es 中存储一些订单数据,你就应该在 es 中创建一个索引 order_idx,所有的订单数据就都写到这个索引里面去。看了一些文章有的说索引可以理解为关系型数据库中的数据库,有的说相当于数据库中的表。我的理解是它相对于关系型数据库更为灵活,因为在7.0之后的版本,type被废除,它直接可以自定义,感觉就就是直接添加到属性中,而不是原来的在索引之后添加type,所以在添加数据时就可以更加灵活,所以我认为一个索引可以理解为一个数据库。

2、type

7.0之前的写法:

PUT twitter
{
"mappings": {
"user": {
"properties": {
"name": { "type": "text" },
"user_name": { "type": "keyword" },
"email": { "type": "keyword" }
}
},
"tweet": {
"properties": {
"content": { "type": "text" },
"user_name": { "type": "keyword" },
"tweeted_at": { "type": "date" }
}
}
}
} PUT twitter/user/kimchy
{
"name": "Shay Banon",
"user_name": "kimchy",
"email": "shay@kimchy.com"
} PUT twitter/tweet/1
{
"user_name": "kimchy",
"tweeted_at": "2017-10-24T09:00:00Z",
"content": "Types are going away"
} GET twitter/tweet/_search
{
"query": {
"match": {
"user_name": "kimchy"
}
}
}  

在程序中可以很清楚的看到构架,tweet和user都是type,可以理解为索引的下个级别,可以理解为一张表,put 索引/type/id 添加一条数据(document),数据中的字段就是filed。

7.0之后:

PUT twitter
{
"mappings": {
"_doc": {
"properties": {
"type": { "type": "keyword" }, (1)
"name": { "type": "text" },
"user_name": { "type": "keyword" },
"email": { "type": "keyword" },
"content": { "type": "text" },
"tweeted_at": { "type": "date" }
}
}
}
} PUT twitter/_doc/user-kimchy
{
"type": "user", (1)
"name": "Shay Banon",
"user_name": "kimchy",
"email": "shay@kimchy.com"
} PUT twitter/_doc/tweet-1
{
"type": "tweet", (1)
"user_name": "kimchy",
"tweeted_at": "2017-10-24T09:00:00Z",
"content": "Types are going away"
} GET twitter/_search
{
"query": {
"bool": {
"must": {
"match": {
"user_name": "kimchy"
}
},
"filter": {
"match": {
"type": "tweet" (1)
}
}
}
}
} 

从官方解释中能够看出,之前type没有了,取而代之的是_doc,我是这么理解的,之前可以建立很多type,相当于可以减很多表,数据可以添加。现在只有一张_doc表格,表格多了type属性,可以添加type属性的内容加以区分。

图片理解:

3、document

相当于一条数据。

4、filed

相当于一条数据中的一个字段的内容。

5、mapping

Mapping 来定义每个字段的类型。比如诗题、作者、朝代都是 Keyword 类型,诗内容是 Text 类型,而字数是 Integer 类型,最后就是把数据组织成 Json 格式存放进去了。keyword和text都是字符成类型,它们有什么区别呢?

这涉及到分词的问题,Keyword 类型是不会分词的,直接根据字符串内容建立反向索引,Text 类型在存入 Elasticsearch 的时候,会先分词,然后根据分词后的内容建立反向索引。

6、id

再添加数据时需要添加id。

  a、可以自己添加id

  b、不添加,系统会自动配置id

二、为什么要取消type呢?

最初,我们讨论了索引“类似于数据库”和type“相当于表”。严格来说,这是一个错误的类比,导致了错误的假设。在SQL数据库中,表是相互独立的。

一个表中的列与另一个表中具有相同名称的列没有关系。这与映射类型中的字段不同。在Elasticsearch索引中,不同映射类型中具有相同名称的字段在内部由相同的Lucene字段支持。换句话说,使用上面的示例,user类型中的user_name字段存储在与tweet类型中的user_name字段完全相同的字段中,而且两个user_name字段在这两种类型中必须具有相同的映射(定义)。例如,当您想要删除一个类型中的日期字段和同一个索引中的另一个类型中的布尔字段时,这可能会导致失败。

最重要的是,存储在同一索引中具有很少或没有共同字段的不同实体会导致数据稀疏,并影响Lucene有效压缩文档的能力。

ES的索引、type、document、filer、mapping、id的更多相关文章

  1. Es创建索引、设置和修改Mapping

    Http接口操作示例如下: 1.创建索引: 2.删除索引: 3.创建mapping: 4.查看mapping:

  2. ES 11 - 配置Elasticsearch的映射 (mapping)

    目录 1 映射的相关概念 1.1 什么是映射 1.2 映射的组成 1.3 元字段 1.4 字段的类型 2 如何配置mapping 2.1 创建mapping 2.2 更新mapping 2.3 查看m ...

  3. es第二篇:Document APIs

    文档CRUD API分为单文档API和多文档API.这些API的索引名参数既可以是一个真正的索引的名称,也可以是某个索引的别名alias. 单文档API有:Index API.Get API.Dele ...

  4. es创建索引的格式,并初始化数据

    es创建索引的格式,并初始化数据 学习了:https://www.imooc.com/video/15759 1, 创建格式 POST 127.0.0.1:9200/book/novel/_mappi ...

  5. 63.es中的type数据类型

    主要知识点 理解es中的type数据类型     一.type的理解 type是一个index中用来区分类似的数据的,但是可能有不同的fields,而且有不同的属性来控制索引建立.分词器.field的 ...

  6. 为何在查询中索引未被使用 (Doc ID 1549181.1)

        To Bottom * 为何在查询中索引未被使用 (Doc ID 1549181.1) To Bottom 文档内容 用途   排错步骤   高速检查   表上是否存在索引?   索引是否应该 ...

  7. ES 服务器 索引、类型仓库基类 BaseESStorage

    /******************************************************* * * 作者:朱皖苏 * 创建日期:20180508 * 说明:此文件只包含一个类,具 ...

  8. all index range ref eq_ref const system 索引type说明

    背景知识 在使用sql的过程中经常需要建立索引,而每种索引是怎么处罚的又是怎么起到作用的,首先必须知道索引和索引的类型. 索引类型type 我们可以清楚的看到type那一栏有index ALL eq_ ...

  9. ES正在弱化type这个概念

    百度Elasticsearch-产品描述-介绍-百度云 https://cloud.baidu.com/doc/BES/System.html#.E5.9F.BA.E6.9C.AC.E6.A6.82. ...

随机推荐

  1. C++入门经典-例2.6-简单用cout输出字符

    1:代码如下: // 2.6.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...

  2. 【转】一款开源免费跨浏览器的视频播放器--videojs使用介绍

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. 2019Java第十三周课程总结

    这周主要是学习了监听器还有制作记事本,主要可以由一下代码来体现 监听器 实验代码 package text12; import java.awt.Container; import java.awt. ...

  4. io.h配置 ubuntu

    https://www.cnblogs.com/liuyangak/articles/3239238.html https://blog.csdn.net/jiao_mrswang/article/d ...

  5. ffmpeg静态库Windows版本

    GitHub上面有一个项目 提供了编译环境 以及编译好的静态库 https://github.com/ShiftMediaProject/FFmpeg

  6. leetcode-easy-listnode-19 remove nth node from end of list

    mycode  88.29% 关键是一定要head前新建一个节点,否则要分类讨论很多次来避免slow或者fast出现None.next的错误 # Definition for singly-linke ...

  7. TNS:could not resolve the connect identifier specified解决办法

    添加环境变量解决:TNS_ADMIN ->> D:\OracleDB\product\11.2.0\dbhome_1\NETWORK\ADMIN

  8. 内网IPC$入侵

    一.域操作相关的命令1.查看域用户 net user/domain2.查看有几个域 net view/domain3.查看域内的主机 net view/domain: XXX4.查看域里面的组 net ...

  9. PermissionUtils

    import android.annotation.TargetApi; import android.app.Activity; import android.content.Context; im ...

  10. 详析静态网站与动态网站区别(服务器ip dns 端口)

    几个基本知识 1.服务器:能够提供服务的机器 取决于机器上所安装的服务软件     1) web服务器:提供web服务(网站访问) 就需要安装web服务软件,Apache,tomcat,iis等 2. ...