1.1 简介
Elasticsearch是一个高度可伸缩的开源全文搜索引擎。Elasticsearch让你可以快速、实时地存储、搜索和分析大量数据,它通常作为互联网应用的内部搜索引擎,为需要复杂搜索功能的应用提供支持。ElasticSearch是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
1.2 使用场景
电商搜索引擎,使用 Elasticsearch 存储商品与品类信息,提供搜索和搜索建议功能(全文检索)。
日志系统,收集,分析日志数据,可以使用 Logstash (Elasticsearch/Logstash/Kibana 栈的一部分)来收集,然后将这些数据提供给Elasticsearch,通过搜索和聚合计算挖掘有价值的信息,最后通过 Kibana 进行可视化展示。 价格提醒平台,在价格变动时,让用户可以收到通知。抓取供应商的价格,推入Elasticsearch,并使用其反向搜索(Percolator)功能来匹配用户的价格通知设置,找到匹配后将提醒推送给用户。BI(商业智能),分析业务大数据,挖掘有价值的商务信息。可以使用 Elasticsearch来存储数据,然后使用 Kibana ElasticsearchLogstashKibana堆栈的一部分构建自定义仪表板,该仪表板可以可视化显示数据。此外,还可以使用Elasticsearch 聚合功能对数据执行复杂的业务智能分析。
在实际运算过程中,每个查询任务提交到某一个节点,该节点必须负责将数据进行整理汇聚,再返回给客户端,也就是一个简单的节点上进行 Map 计算,在一个固定的节点上进行 Reduces 得到最终结果向客户端返回。
1.3.2 天然索引
ES 所有数据都是默认进行索引的,这点和 MySQL 正好相反,MySQL 是默认不加索引,要加索引必须特别说明,ES 只有不加索引才需要说明。而 ES 使用的是倒排索引和 MySQL 的 B+Tree 索引不同。
传统关系性数据库
可以看到 Lucene 为倒排索引(Term Dictionary)部分又增加一层TermIndex结构,用于快速定位,而这TermIndex是缓存在内存中的,但MySQL的B+tree不在内存中,所以整体来看ES速度更快,但同时也更消耗资源(内存、磁盘)