一 什么是 Elasticsearch
ElasticSearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全 文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可 条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时 搜索,稳定,可靠,快速,安装使用方便。
二 Elasticsearch 与 Solr 对比
优点
Elasticsearch 是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。
Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。
处理多租户(multitenancy)不需要特殊配置,而 Solr 则需要更多的高级设置。
Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。
各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
缺点
还不够自动(不适合当前新的 Index Warmup API,即冷启动/预热数据的方式。当系统 长期处于低水位的情况下,流量突然增加时,直接把系统拉升到高水位可能瞬间把系统 压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给 冷系统一个预热的时间,避免冷系统被压垮。)
三 Solr
1.优缺点
Solr 是 Apache Lucene 项目的开源企业搜索平台。其主要功能包括全文检索、命中标示、 分面搜索、动态聚类、数据库集成,以及富文本(如 Word、PDF)的处理。Solr 是高度可扩 展的,并提供了分布式搜索和索引复制。Solr 是最流行的企业级搜索引擎,Solr4 还增加了 NoSQL 支持。
Solr 是用 Java 编写、运行在 Servlet 容器(如 Apache Tomcat 或 Jetty)的一个独立的 全文搜索服务器。 Solr 采用了 Lucene Java 搜索库为核心的全文索引和搜索,并具有类似 REST 的 HTTP/XML 和 JSON 的 API。Solr 强大的外部配置功能使得无需进行 Java 编码,便
可对 其进行调整以适应多种类型的应用程序。Solr 有一个插件架构,以支持更多的高级定 制。
2010 年 Apache Lucene 和 Apache Solr 项目合并,两个项目是由同一个 Apache 软件 基金会开发团队制作实现的。提到技术或产品时,Lucene/Solr 或 Solr/Lucene 是一样的。 现实生活中我们都知道大多数网站或应用都必须具有某种搜索功能,问题是搜索功能往 往是巨大的资源消耗并且它们由于沉重的数据库加载而拖垮你的应用的性能。这就是为什么转移负载到一个外部的搜索服务器是一个不错的主意,Apache Solr 是一个独 立的企业级搜索应用服务器,它对外提供类似于 Web-service 的 API 接口。用户可以通过 http 请求,向搜索引擎服务器提交一定格式的 XML 文件,生成索引;也可以通过 Http Get 操作提出查找请求,并得到 XML 格式的返回结果。它通过使用类似 REST 的 HTTP API,确 保你能从几乎任何编程语言来使用 Solr。
2.性能
当单纯的对已有数据进行搜索时,Solr 更快。
当实时建立索引时, Solr 会产生 io 阻塞,查询性能较差, Elasticsearch 具有明显的优势。
随着数据量的增加,Solr 的搜索效率会变得更低,而 Elasticsearch 却没有明显的变化。
综上所述,Solr 的架构不适合实时搜索的应用。
四 Elasticsearch 与关系型数据库对比
1. 一个 ES 集群可以包含多个索引(数据库),每个索引又包含了很多类型(表),类型中包 含了很多文档(行),每个文档又包含了很多字段(列)。
2. 传统数据库为特定列增加一个索引,例如 B-Tree 索引来加速检索。Elasticsearch 和 Lucene 使用一种叫做倒排索引(inverted index)的数据结构来达到相同目的。
3. 倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括 一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值 来确定记录的位置,因而称为倒排索引(inverted index)。
优点
Solr 有一个更大、更成熟的用户、开发和贡献者社区。
支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、 XML、CSV 等纯文本格式。
Solr 比较成熟、稳定。
不考虑建索引的同时进行搜索,速度更快。
缺点
建立索引时,搜索效率下降,实时索引搜索效率不高。