作者:无棱9931 | 来源:互联网 | 2023-08-30 12:48
在学习Elasticsearch的过程中,你是不是多多少少有以下困惑: 面对Elasticsearch1.X、2.X、5.X、6.X的不同版本,你无从下手?面对ElasticSta
在学习 Elasticsearch 的过程中,你是不是多多少少有以下困惑:
面对 Elasticsearch1.X、2.X、5.X、6.X 的不同版本,你无从下手?
面对 ElasticStack(Elasticsearch、Logstash、Kibana、Beat),你不知道从何学起?
面对各种技术文档(官方的及非官方的),你是否感到非常困惑?
面对 Elasticsearch 出现的各种异常、Bug,好不容易找到一个技术群或提问,又没人解答?
市面上的书籍分两种:老外的原理透彻,但版本过时;国内的版本稍新、但不透彻,你是不是很迷茫……
本文:
不谈搜索引擎的原理;
不谈倒排索引的原理;
不谈乐观锁、悲观锁的机制;
……
只谈:
从产品开发、项目实战的角度,如何让一个 Java 程序员甚至 C/C++ 的程序员快速上手。
海量的版本中,告诉你明确的选择。
ELKStack 技术体系,你的学习优先级。
ELK 技术体系架构。
ELK 技术栈的应用场景。
有了传统关系型数据库(MySQL、Oracle)、非关系型数据库(Mongo),如何快速的导入 Elasticsearch,实现全文检索。
Elasticsearch 实战中遇到问题,如何高效解决。
Elasticsearch 集群部署。
Elasticsearch 集群调优清单。
Elasticsearch 高效进阶方法论。
……
横扫你学习 Elasticsearch 的诸多疑惑,让你少走半年弯路!
ELK Stack 认知
考虑到有初学的朋友,先对 ELK Stack 的认知咱们达成共识。
ELK Stack 由最早期的最核心的 Elasticsearch(以下部分简称 ES),集合 Logstash、Kibana、beats 等发展而来,形成 ELK Stack 体系。如下图所示。
enter image description here
Elasticsearch 认知
Elasticsearch 为开源的、分布式、基于 Restful API、支持 PB 甚至更高数量级的搜索引擎工具。
相对于 MySQL,给出如下的对应关系表会更好理解。
enter image description here
从上表中可以看出:
MySQL 中的数据库(DataBase),等价于 ES 中的索引(Index)。
MySQL 中一个数据库下面有 N 张表(Table),等价于 1 个索引 Index 下面有 N 多类型(Type)。
MySQL 中一个数据库表(Table)下的数据由多行(Row)多列(column,属性)组成,等价于 1 个 Type 由多个文档(Document)和多 Field 组成。
MySQL 中定义表结构、设定字段类型等价于 ES 中的 Mapping。举例说明,在一个关系型数据库里面,Schema 定义了表、每个表的字段,还有表和字段之间的关系。与之对应的,在 ES 中,Mapping 定义索引下的 Type 的字段处理规则,即索引如何建立、索引类型、是否保存原始索引 JSON 文档、是否压缩原始 JSON 文档、是否需要分词处理、如何进行分词处理等。
MySQL 中的增 insert、删 delete、改 update、查 search 操作等价于 ES 中的增 PUT/POST、删 Delete、改 _update、查 GET。其中的修改指定条件的更新 update 等价于 ES 中的 update_by_query,指定条件的删除等价于 ES 中的 delete_by_query。
MySQL 中的 group by、avg、sum 等函数类似于 ES 中的 Aggregations 的部分特性。
MySQL 中的去重 distinct 类似 ES 中的 cardinality 操作。
MySQL 中的数据迁移等价于 ES 中的 reindex 操作。
以上,通过类比,能加快理解 Elasticsearch 的速度。
如下是传统的关系型数据库(如 Oracle、MySQL)、非关系型的数据库(如 Mongo)所做不到的:
1.传统的关系型数据库虽然能支持类型“like %待检索词%”模糊语句匹配,但无法进行全文检索(分词检索)。