1.什么是Elasticsearch?
ES是一个基于RESTful web接口,基于Apache Lucene的开源分布式搜索引擎
ES本质上就是分布式搜索引擎
- 可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司
- Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起形成了ES;
- 对开发者而言开箱即用,非常简单,作为中小型的应用,几分钟部署ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂
- 数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;Elasticsearch作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能
1.1 ES的特点
- 分布式:可以将海量数据分散到多台服务器存储、检索
- 海量数据处理:基于分布式把数据打散到多台服务器,秒级处理海量数据
- 近实时:基于内存和OS Cash操作,进行数据搜索和分析时轻松做到秒级别
- 横向扩展:低成本动态扩展机器
- 高可用:replica复制机制,一个分片可以设置多个备份,主节点宕机时会自动切换到从节点,集群仍旧可以照常运行
2. 为什么要用ES做搜索引擎,而不用数据库或者Lucene?
2.1 数据库做搜索引擎
优点:
- 学习成本低:新增一些全文索引,使用普通的sql语句查询即可
- 没有额外部署成本
缺点:
- 数据库只适合做关系型事务操作,不适合搜索引擎这种大数据量、高并发的搜索操作;
- 如果用数据库做搜索引擎,必然要多维度多表搜索,一个表一执行一条sql语句,会压垮数据库;
- 数据库虽然支持全文搜索,会导致写性能降低、浪费磁盘空间、
- 数据库like查询,前%会导致索引失效(相当于全文检索了)
- 不支持分词查询是致命缺点
2.2 Lucene做搜索引擎
优点:
- 支持分词查询、短语查询、通配符查询、近似查询
- 基于倒排索引,查询效率高
缺点:
- 仅提供jar包,不能提供API接口调用
- 使用Lucence做搜索引擎难度高,比较考验开发者的技术水平
- 多台节点Lucence没办法互相通讯,每台Luncence都保存相同的数据,随着索引数据越来越大,总有一天会压垮服务器
2.3 Elasticsearch
ES基于Lucene写了一套代码,支持多节点通讯,以便数据分片存储、数据备份、主备切换(容灾)
3. Elasticsearch的应用场景
- 数据搜索:
维基百科、百度、搜狐、Stack Overflow、GitHub、电商商品搜索等
- 数据分析:
- 日志数据分析,logstash采集日志,ES进行复杂的数据分析(elasticsearch+logstash+kibana)
- 用户购物习惯分析,90后女生喜欢晚上23点后搜索化妆品,90后男生喜欢搜索球鞋,或者某个用户最近经常搜索某类商品,这样就可以有针对性推荐用户喜欢的商品
- 商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户
- BI系统,商业智能(Business Intelligence)。分析某个区域最近几年的用户消费趋势、用户群体、热门商品,并产出分析报表。比如深圳宝安区,最近3年,平均每年消费教育投入金额增长50%,其中IT教育平均每年投入增长100%,而且用户群体85%是高级白领,其中某某小区附近家长对教育投资最高。这样就可以去那个小区旁边开一家教育机构