ES入门篇1--什么是ES

331 阅读4分钟

1.什么是Elasticsearch?


ES是一个基于RESTful web接口,基于Apache Lucene的开源分布式搜索引擎

ES本质上就是分布式搜索引擎

  1. 可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司
  2. Elasticsearch不是什么新技术,主要是将全文检索、数据分析以及分布式技术,合并在了一起形成了ES;
  3. 对开发者而言开箱即用,非常简单,作为中小型的应用,几分钟部署ES,就可以作为生产环境的系统来使用了,数据量不大,操作不是太复杂
  4. 数据库的功能面对很多领域是不够用的(事务,还有各种联机事务型的操作);特殊的功能,比如全文检索,同义词处理,相关度排名,复杂数据分析,海量数据的近实时处理;Elasticsearch作为传统数据库的一个补充,提供了数据库所不不能提供的很多功能

1.1 ES的特点

  1. 分布式:可以将海量数据分散到多台服务器存储、检索
  2. 海量数据处理:基于分布式把数据打散到多台服务器,秒级处理海量数据
  3. 近实时:基于内存和OS Cash操作,进行数据搜索和分析时轻松做到秒级别
  4. 横向扩展:低成本动态扩展机器
  5. 高可用:replica复制机制,一个分片可以设置多个备份,主节点宕机时会自动切换到从节点,集群仍旧可以照常运行

2. 为什么要用ES做搜索引擎,而不用数据库或者Lucene?


2.1 数据库做搜索引擎

优点:

  1. 学习成本低:新增一些全文索引,使用普通的sql语句查询即可
  2. 没有额外部署成本

缺点:

  1. 数据库只适合做关系型事务操作,不适合搜索引擎这种大数据量、高并发的搜索操作;
  2. 如果用数据库做搜索引擎,必然要多维度多表搜索,一个表一执行一条sql语句,会压垮数据库;
  3. 数据库虽然支持全文搜索,会导致写性能降低、浪费磁盘空间、
  4. 数据库like查询,前%会导致索引失效(相当于全文检索了)
  5. 不支持分词查询是致命缺点

2.2 Lucene做搜索引擎

优点:

  1. 支持分词查询、短语查询、通配符查询、近似查询
  2. 基于倒排索引,查询效率高

缺点:

  1. 仅提供jar包,不能提供API接口调用
  2. 使用Lucence做搜索引擎难度高,比较考验开发者的技术水平
  3. 多台节点Lucence没办法互相通讯,每台Luncence都保存相同的数据,随着索引数据越来越大,总有一天会压垮服务器

2.3 Elasticsearch

ES基于Lucene写了一套代码,支持多节点通讯,以便数据分片存储、数据备份、主备切换(容灾)

3. Elasticsearch的应用场景


  1. 数据搜索:

维基百科、百度、搜狐、Stack Overflow、GitHub、电商商品搜索等

  1. 数据分析:
  1. 日志数据分析,logstash采集日志,ES进行复杂的数据分析(elasticsearch+logstash+kibana)
  2. 用户购物习惯分析,90后女生喜欢晚上23点后搜索化妆品,90后男生喜欢搜索球鞋,或者某个用户最近经常搜索某类商品,这样就可以有针对性推荐用户喜欢的商品
  3. 商品价格监控网站,用户设定某商品的价格阈值,当低于该阈值的时候,发送通知消息给用户
  4. BI系统,商业智能(Business Intelligence)。分析某个区域最近几年的用户消费趋势、用户群体、热门商品,并产出分析报表。比如深圳宝安区,最近3年,平均每年消费教育投入金额增长50%,其中IT教育平均每年投入增长100%,而且用户群体85%是高级白领,其中某某小区附近家长对教育投资最高。这样就可以去那个小区旁边开一家教育机构