# 安装es

elasticsearch学习笔记 - 安装

最近用到了es,于是从网上找资料,但是好多都过时了,比如type在elasticsearch 6.0开始已经不推荐使用了。联合查询6.x使用的是join类型的字段,也不在支持type之间的联合查询。问什么要取消type呢?官方给出的理由是

①,而在我们elasticsearch中同一 Index 下,同名 Field 类型必须相同,即使不同的 Type;
②, 同一 Index 下,TypeA 的 Field 会占用 TypeB 的资源(互相消耗资源),会形成一种稀疏存储的情况。尤其是 doc value ,为什么这么说呢?doc value为了性能考虑会保留一部分的磁盘空间,这意味着 TypeB 可能不需要这个字段的 doc_value 而 TypeA 需要,那么 TypeB 就被白白占用了一部分没有半点用处的资源;
③,Score 评分机制是 index-wide 的,不同的type之间评分也会造成干扰。
④,索引元数据本身是放在主节点中维护的,CP 设计。意味着涉及到大量字段变更及元数据变更的操作,都会导致该 Index 被堵塞或假死。我们应该对这样的 Index 做隔离,避免影响到其他 Index 正常的增删改查。甚至当涉及到字段变更十分频繁且无法预定义 schema 的场景时,是否要使用 ES 都应该慎思熟虑了!

出现这种情况主要是在elasticsearch早期时候提出的一些概念,当时为了便于推广,跟关系型数据库作了如下比喻:

myql elasticsearch
database index
table type
column field

很多学习elasticsearch的人估计都看过这个比喻,但其实这是错误的。elasticsearch是基于 Lucene开发的,而在 Lucene中是没有table概念的,有的只是文档和字段。