为什么要使用ElasticSearch?
什么是 elasticSearch
- 基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎
- 分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索、
- 横向扩展至数以百计的服务器存储以及处理PB级的数据
- 极短的时间内存储、搜索和分析大量的数据
高可用和可扩展
垂直/向上扩展:购置性能更强的服务器或者升级硬件来完成系统扩展
水平/向外扩展:增加更多的服务器来完成系统扩展
尽管ES能够利用更强劲的硬件,垂直扩展毕竟还是有它的极限。真正的可扩展性来自于水平扩展,通过向集群中添加更多的节点来分担负载,增加可靠性,因为ES天生就是分布式的,它知道如何管理多个节点来完成扩展和实现高可用性。这也意味你的应用不需要做任何的改动
使用场景
分布式搜索引擎(搜索查询)和数据分析引擎(用户埋点)
- 关系型数据库查询瓶颈:考虑使用,ES的优点在于查询,然而实践证明,在被作为数据库来使用,即写完马上查询会有延迟
- 用户行为日志:直接用
- 搜索场景:直接用
elasticSearch和Lucene、Solr的区别
ES与Lucene的区别
- Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用中,并且Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解它 是如何工作的。lucene有很多缺陷,es并不存在。
- 只能在Java项目中使用,并且要以jar包的方式直接集成项目中
- 使用非常复杂-创建索引和搜索索引代码繁杂
- 不支持集群环境-索引数据不同步(不支持大型项目)
- 索引数据如果太多就不行,索引库和应用所在同一个服务器,共同占用硬盘共用空间少.
ES与Solr对比
- 单纯对已有数据进行搜索时,solr更快;但是实时简历索引时,solr会产生io阻塞,查询性能较差。而es不会
- solr利用zk进行分布式管理,而es自身带有分布式协调管理功能。
- solr支持更多的数据格式,如json、xml、csv等,而es仅支持json文件格式
- solr在传统的搜索应用中表现好于es,但在处理实时搜索应用时效率明显低于es。
ES的几大优势
- 很简便的横向扩容,分布式的架构,可以轻松地对资源进行横向纵向扩缩容,可以满足不同数据量级及查询场景对硬件资源的需求。能由数百台到万台机器搭建满足PB级的快速搜索,也能搭建单机版服务小公司。
- 查询速度快:ES底层采用Lucene作为搜索引擎,并在此之上做了多重优化,保证了用户对数据查询数据的需求。可"代替"传统关系型数据库,也可用于复杂数据分析,海量数据的近实时处理等。
- 相关性高:ES内部提供了完善的评分机制,会根据分词出现的频次等信息对文档进行相关性排序,保证相关性越高的文档排序越靠前。另外还提供了包括模糊查询,前缀查询,通配符查询等在内的多种查询手段,帮助用户快速高效地进行检索。
- 功能点多但使用比较简便,开箱即用,性能优化比较简单
- 分布式:索引分拆成多个分片,每个分片可有零个或多个副本。集群中的每个数据节点都可承载一个或多个分片,并且协调和处理各种操作
ES相比于传统MySQL的优点
A relational database can store data and also index it. A search engine can index data but also store it.
关系型数据库首先是存储,搜索只是顺便提供的功能,
而搜索引擎,首先是搜索,但是不把数据存下来就搜不了,所以只好存一存
术业有专攻,专攻搜索的搜索引擎,自然会提供更强大的搜索能力
- 模糊查询
在传统关系型数据库中,数据检索只能通过 like 来实现,例如需要在酒店数据中查询名称包含公寓的酒店,需要通过如下 sql 实现:
select * from hotel_table where hotel_name like ‘%公寓%’;
问题:
·无法使用数据库索引,需要全表扫描,性能差
·搜索效果差,只能首尾位模糊匹配,无法实现复杂的搜索需求
·无法得到文档与搜索条件的相关性
和「精确匹配」相比,「相关性匹配」更贴近人的思维方式。 - 分词
当用户使用Elasticsearch时进行搜索时,Elasticsearch就自动分好词 - 相关性
Elasticsearch支持全文搜索和相关度评分。这样在返回结果就会根据分数由高到低排列。分数越高,意味着和查询语句越相关 - 性能
- 轻松支持各种复杂的查询条件
- 它是分布式实时文件存储,会把每一个字段都编入索引(倒排索引),利用高效的倒排索引,以及自定义打分、排序能力与丰富的分词插件等,能实现任意复杂查询条件下的全文检索需求
- 可拓展性强
天然支持分布式存储,通过极其简单的配置实现几百上千台服务器的分布式横向扩容,轻松处理 PB 级别的结构化或非结构化数据。 - 高可用,容灾性能好
通过主备节点以及故障自动探测和恢复,有力保障了高可用