前言
最近在学习Elasticsearch,在这里记录下自己的学习过程,以便于加深记忆,并希望可以帮助大家更好的理解Elasticsearch。
现在官方已经出了中文文档了,如果你想快速的学习使用Elasticsearch可以继续浏览此篇博客及后续博客,如果你想系统学习Elasticsearch,还是建议大家去看官方权威文档,地址:Elasticsearch: 权威指南
Elasticsearch关键字
分布式、高可用、高性能、可伸缩、近实时、搜索引擎、分析引擎、开箱即用。
什么是Elasticsearch?
Elasticsearch是分布式、高可用、高性能、可伸缩、近实时的搜索引擎和分析引擎。
Elasticsearch的使用场景
站内搜索:CSDN、Github、博客园、知乎。
互联网搜索:百度、维基百科。
IT系统:OA系统、CRM系统。
Elasticsearch为什么会火?它解决了哪些的问题?
目前,每行每业所产生的数据每年都在剧增,当数据达到亿、十亿、百亿,选用什么样的数据库存储?怎么保证数据安全?如何解决单点故障?如何去快速的检索数据,怎样去做数据的统计分析?
传统数据库采取分库分表来尽量满足大量数据的存储及搜索。通过主从备份来保证数据的安全。通过中间件进行心跳监控来解决单点故障问题。分库分表通过路由分析SQL分发到指定节点进行数据搜索、汇总。
Elasticsearch通过分片,备份进行数据存储,以及保证数据安全。通过节点竞选机制保证节点故障的问题解决。通过路由将请求分发到各个节点,各个节点将信息反馈给路由,由路由节点进行合并汇总,然后将结果返回。
Elasticsearch使用Lucene作为核心来实现所有索引和搜索的功能,使得每个文档的内容都可以被索引、搜索、排序、过滤。同时,提供了丰富的聚合功能,可以对数据进行多维度分析。
传统数据库为特定列增加一个索引,例如B-Tree索引来加速检索。Elasticsearch和Lucene使用一种叫做倒排索引的数据结构来达到相同目的。
倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引。
Elasticsearch默认每个字段都是建立倒排索引,这也是Elasticsearch为什么在大数据搜索上比传统数据库快了不止一个量级的原因。所以Elasticsearch更加适合大数据的检索。
当然Elasticsearch默认每个字段都是建立倒排索引也不是一点缺点都没有的,毕竟天下没有免费的午餐,大量创建倒排索引所带来的后果就是要消耗很大的磁盘、内存空间,当内容更新后,索引的维护代价也比较大。