在学习Elasticsearch之前,需要先了解一下Elasticsearch的相关介绍,在学习了学院的教学视频之后,本文罗列总结涉及到的基础知识,希望有所帮助。
一.什么是Elasticsearch?
ElasticSearch是一个分布式,高性能、高可用、可伸缩的搜索和分析系统。
怎么理解这个概念呢,首先让我们先从“搜索”开始,对比一下百度搜索和数据库搜索的差异。假设我们要搜索一个“小米手机专用券”:
(1)数据库搜索:通过查询语句,搜索“小米手机专用券”关键字,但是会存在数据量过百万或亿级时性能下降明显;
另外数据库搜索只能通过严格的关键字进行搜索,无法将关键字拆分进行搜索,例如搜索“小米专用券”时就无法正确搜索出来了。
(2)百度搜索:这里既可以通过“小米手机专用券”关键字搜索,也可以通过“小米专用券”等拆分后的关键字进行搜索,而且搜索速度通常非常快。
这两点是普通数据库搜索所不能比拟的。
而ElasticSearch正如百度一样,属于一个近实时的搜索引擎(平台),因此在搜索这一块有非常好的应用价值。
说到搜索我们就很容易和Lucene进行对比,Lucene是一个jar包,这个包封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法,这些工具代码可以让我们使用java就能很方便开发相关的搜索服务,但是Lucene是单机的模式,如果你的数据量超过了一台物理机的容量就需要扩容,将数据拆分成若干份放在不同的集群中,同时还需要拷贝容错,机器宕机,数据一致性等复杂的场景,这个实现就比较复杂了。
而ElasticSearch解决了这些问题
1、自动维护数据的分布到多个节点的索引的建立,还有搜索请求分布到多个节点的执行
2、自动维护数据的冗余副本,保证了一旦机器宕机,不会丢失数据
3、封装了更多高级的功能,例如聚合分析的功能,基于地理位置的搜索
因此再回过头来思考ElasticSearch的分布式,高性能、高可用、可伸缩概念,就相对容易多了,正如上面所介绍的,ElasticSearch本身就是一个自带了分布式架构的搜索产品。