一、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. Spring Data概览

    总结:JpaRepository继承PagingAndSortingRepository,PagingAndSortingRepository继承CrudRespository,CrudResposi ...

  2. 第六周总结 & 实验报告(四)

    第六周小结 一.instanceof关键字         在Java中使用instanceof关键字判断一个对象到底是哪个类的实例,返回boolean类型 1.instanceof关键字的作用 例c ...

  3. JS基础_Null和Undefind

    1.Null Null类型的值只有一个值,就是null null专门用来表示一个为空的对象 var a=null; console.log(a);//nulltypeof a //object 2.U ...

  4. 【JVM】jstack 查询占用最大资源线程|排查死循环等

    jstack 应用 首先通过:ps -ef|grep java 得到java pid 查看哪个线程占用最多资源: 找出该进程内最耗费CPU的线程,可以使用ps -Lfp pid或者ps -mp pid ...

  5. 源码编译apache出错

    报错信息如下 exports.c:1572: error: redefinition of `ap_hack_apr_allocator_create' exports.c:177: error: ` ...

  6. DeepFaceLab进阶:H128,DF,SAE模型有何不同?哪个最好?

    整个换脸过程中模型是最重要的一部分,耗时久,调优难,很多人虽然一直在跑模型,却并不知道每个模型的特点. 我也常常被问及: 到底用哪个模型换脸效果最好? H128和DF有什么差别? H64和H28有什么 ...

  7. WPF 使用Task代替ThreadPool和Thread

    一:Task的优势 ThreadPool相比Thread来说具备了很多优势,但是ThreadPool却又存在一些使用上的不方便.比如: 1: ThreadPool不支持线程的取消.完成.失败通知等交互 ...

  8. UniEAP Platform V5.0建库

    create tablespace platform datafile 'platform.dbf' size 100M reuse autoextend on next 50M; . . drop ...

  9. CentOS7 下SaltStack部署

    一,概念SaltStack是一个服务器基础架构集中化管理平台,具备配置管理.远程执行.监控等功能,一般可以理解为简化版的puppet和加强版的func.SaltStack基于Python语言实现,结合 ...

  10. vue-cli本地环境API代理设置和解决跨域

    前言 我们在使用vue-cli启动项目的时候npm run dev便可以启动我们的项目了,通常我们的请求地址是以localhost:8080来请求接口数据的,localhost是没有办法设置cooki ...