如何理解 elasticsearch 数据库的 index

2022-09-11 00:05:20 +08:00
 bestcondition

刚接触 es, 看到有些资料说是这样的关系

es mysql
index database
type table
field column

但是在 es6 时一个 index 只能有一个 type, es7 到 es8 则完全删除了 type 的概念, 这时候该如何理解 es 的 index 呢?

另外, mysql 对一个 tabel 的 column 有数量限制, es 默认对一个 index 的 field 限制 1000 个, 可以调节, 所以 mysql 和 es 处理字段(field | column)是相同的吗? 为什么数据库对列的个数有限制?

1009 次点击
所在节点    问与答
3 条回复
LeegoYih
2022-09-11 00:16:32 +08:00
没必要强行用数据库的思维来使用 es ,这只会让初学者更加困惑,index 就是表示一种(一类)东西,从字面意思去理解即可。


为什么删除 type 可以看官方的解释: https://github.com/elastic/elasticsearch/blob/6.5/docs/reference/mapping/removal_of_types.asciidoc


谷歌机翻:

为什么要删除映射类型?

最初,我们谈到索引类似于 SQL 数据库中的数据库,类型相当于表。

这是一个糟糕的类比,导致了错误的假设。在 SQL 数据库中,表是相互独立的。一个表中的列与另一个表中的同名列无关。对于映射类型中的字段,情况并非如此。

在 Elasticsearch 索引中,不同映射类型中具有相同名称的字段在内部由相同的 Lucene 字段支持。换句话说,使用上面的示例,用户类型中的 user_name 字段与 tweet 类型中的 user_name 字段存储在完全相同的字段中,并且两个 user_name 字段在两种类型中必须具有相同的映射(定义)。

例如,当您希望 delete 成为同一索引中一种类型的日期字段和另一种类型的布尔字段时,这可能会导致挫败感。

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

由于这些原因,我们决定从 Elasticsearch 中删除映射类型的概念。
zhangdadadapao
2022-09-11 03:16:00 +08:00
es 的 index 在系统应用设计的时候理解成表没啥问题

mysql 的字段不设置建立索引默认查的时候扫全表吧,不会做什么特殊处理; es 那边会根据类型不同去建行存列存 bkd 树等索引,会根据 query 的不同走各类索引(还可能会涉及到多个 query 组合走不一样的索引),
ksc010
2022-09-11 17:49:02 +08:00
依然可以 ES 的 index 理解为表(其实更像是 excel 的表,之前可以有 1 个 sheet ,ES6 后没有 sheet 了)

关于 mysql 和 ES 字段的问题,根本原因 就是 他们的 存储 索引机制不一样

ES 下 我不管 index 的一个 document 有多少字段,或者有多大(当然 document 越大肯定对速度是有影响的)
反正存多少字段都是存,只有需要检索的时候 ES 才会用到字段
为了提高速度 会给指定的字段建立索引

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/879207

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX