赞
踩
ES全称是Elastic Search,它是一个建立在全文搜索引擎库Lucene基础上的开源搜索和分析引擎。ES它本身具
有分布式存储、检索速度快的特性。所以,我们经常会用它来实现全文检索的功能。
Elastic官网对ES的定义已经不再是ElasticSearch这一个组件,而是指Elastic Stack生态。
而Elastic Stack主要包括ElasticSearch、Logstash、Kibana,这三个经典组合也称之为ELK。ElasticSearch主
要用来做数据存储、Logstash主要用来做数据采集,Kibana主要用来做数据可视化展示。
因为ES应用更广泛的场景还是ElasticSearch,所以,下面我们给大家分享的ES还是单指ElasticSearch。比如,
网站搜索,日志聚集和检索,这些都可能会涉及到TB级别的数据场景,用ES是一个比较好的选择。
Elasticsearch 是一个分布式的开源搜索和分析引擎,其架构由多个组件组成,包括节点、索引、分片和副本等。
Elasticsearch 是一个基于 Apache Lucene 的开源搜索引擎,它提供了分布式的全文搜索和分析功能。以下是一些使用 Elasticsearch 的主要原因:
Elasticsearch 作为一款流行的开源搜索引擎和数据分析引擎,具有许多优势,包括但不限于以下几点:
Elasticsearch 是一个强大的开源搜索和分析引擎,适用于多种场景和应用。以下是 Elasticsearch 的一些适用场景:
Elasticsearch 之所以如此快速,主要是因为其基于分布式架构、倒排索引和内存缓存等方面的设计和优化。
传统的我们的检索是通过文章,逐个遍历找到对应关键词的位置。
而倒排索引,是通过分词策略,形成了词和文章的映射关系表,这种词典+映射表即为倒排索引。有了
倒排索引,就能实现 o(1)时间复杂度的效率检索文章了,极大的提高了检索效率。
学术的解答方式:
倒排索引,相反于一篇文章包含了哪些词,它从词出发,记载了这个词在哪些文档中出现过,由两部分
组成——词典和倒排表。
加分项:倒排索引的底层实现是基于:FST(Finite State Transducer)数据结构。
lucene 从 4+版本后开始大量使用的数据结构是 FST。FST 有两个优点:
(1)空间占用小。通过对词典中单词前缀和后缀的重复利用,压缩了存储空间;
(2)查询速度快。O(len(str))的查询时间复杂度。
倒排索引(Inverted Index)是 Elasticsearch 中用于加速搜索的核心数据结构。在传统的索引结构中,我们通过文档ID来查找对应的词语,而倒排索引则是通过词语来查找对应的文档。
倒排索引的基本原理是将文档中的每个词语都映射到包含该词语的文档列表。具体来说,倒排索引由两个主要的部分组成:词项(Term)和倒排列表(Inverted List)。
无论采取哪种方式,都需要考虑到数据同步的性能、实时性和一致性,并且需要做好错误处理和容错机制,确保即使出现同步失败或者数据丢失的情况,也能够及时恢复和修复。
要保证 Elasticsearch(ES)和数据库之间的数据一致性,可以采取以下一些方法:
监听数据库的 binlog(二进制日志)变更是一种常见且高效的方式,用于实现数据库和 Elasticsearch 之间的数据同步。通过监听数据库的 binlog,可以捕获数据库中的增删改操作,并将这些操作实时同步到 Elasticsearch 中,从而保持数据的一致性。
以下是一般步骤:
通过监听数据库的 binlog 实现数据同步,可以实现较为实时的数据更新,减少了数据同步的时间延迟。但需要注意的是,binlog 同步也会对数据库的性能产生一定影响,因此在实际应用中需要综合考虑数据一致性、性能和实时性等因素。
双写是一种常见的数据同步策略,即在应用层面同时对数据库和 Elasticsearch 进行写入操作,以确保数据同时写入两个存储中,从而保证数据的一致性。这种方式可以有效避免数据同步延迟和错误,确保数据在数据库和 Elasticsearch 中的一致性。
下面是一般实现双写的步骤:
前置前提:
1)只有候选主节点(master:true)的节点才能成为主节点。
2)最小主节点数(min_master_nodes)的目的是防止脑裂。
核对了一下代码,核心入口为 findMaster,选择主节点成功返回对应 Master,否则返回 null。选举流
程大致描述如下:
第一步:确认候选主节点数达标,elasticsearch.yml 设置的值
discovery.zen.minimum_master_nodes;
第二步:比较:先判定是否具备 master 资格,具备候选主节点资格的优先返回; 若两节点都为候选主节点,则 id 小的值会主节点。注意这里的 id 为 string 类型。
题外话:获取节点 id 的方法
1GET /_cat/nodes?v&h=ip,port,heapPercent,heapMax,id,name
2ip port heapPercent heapMax id name复制代码
Elasticsearch 是一个分布式系统,其中的节点可以分为主节点(master-eligible node)和数据节点(data node)。在 Elasticsearch 中,Master 节点负责集群管理的任务,如索引的创建和删除、集群状态的监控等。当一个 Elasticsearch 集群中的 Master 节点失效或需要选举新的 Master 节点时,集群会进行 Master 选举来选择新的 Master 节点。
以下是 Elasticsearch 实现 Master 选举的一般过程:
比较类目 solr Elasticsearch
诞生时间 2004 2010
搜索基础 Lucene搜索
实时建立索引 solr会产生io阻塞,效率低 不阻塞,效率高
不断动态添加数据 检索效率变低 变化不大
自身系统管理 利用zookeeper进行分布式管理 自身带有分布式系统管理功能
部署 一般都要部署到web服务器上,如tomcat。启动tomcat的时候需要配置tomcat与solr的关联 自带运行功能,下载安装包直接安装就行
功用范围 官网提供的功能 更专注核心搜索,其它依赖第三方插件
支持索引方式 HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式 仅支持json文件格式
社区和开发者 apache 软件基金和社区支持 单一商业实体及其员工
节点发现 Apache Zookeeper ,在大师项目中成熟且经过实战测试 Zen内置于ES本身,需要专用的主节点才能进行分裂脑保护
高速缓存 全局,每个段更改无效 每段,更适合动态更改数据
分析引挚性能 非常适合精确计算的静态数据 结果的准确性取决于数据放置
全文搜索功能 基于lucene语文分析,多建议,拼写检查,丰富的高亮显示支持 基于Lucene语文分析,单一建议API实现
DevOps支持 尚未完全,还在完善中。。 非常好的API
机器学习 内置-在流聚合之上,专注于逻辑回归和学习排名贡献模块 商业功能,专注于异常和异常值以及时间序列数据
【搜素引擎】
Solr的优缺点
优点
Solr有一个更大、更成熟的用户、开发和贡献者社区。
支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。
Solr比较成熟、稳定。不考虑建索引的同时进行搜索,速度更快
当单纯的对已有数据进行搜索时,Solr更快。
当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势
随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。
二者安装都很简单;
Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;
Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。
Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用
Elasticsearch使用Lucene作为内部引擎,但是在使用它做全文搜索时,只需要使用统一开发好的API即可,而不需要了解其背后复杂的Lucene的运行原理。当然Elasticsearch并不仅仅是Lucene这么简单,它不但包括了全文搜索功能,还可以进行以下工作:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。实时分析的分布式搜索引擎。可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
Elasticsearch的优缺点**:
优点:Elasticsearch是分布式的。不需要其他组件,分发是实时的,被叫做”Push replication”。Elasticsearch 完全支持 Apache Lucene 的接近实时的搜索。处理多租户(multitenancy)不需要特殊配置,而Solr则需要更多的高级设置。Elasticsearch 采用 Gateway 的概念,使得完备份更加简单。各节点组成对等的网络结构,某些节点出现故障时会自动分配其他节点代替其进行工作。
缺点只有一名开发者(当前Elasticsearch GitHub组织已经不只如此,已经有了相当活跃的维护者)还不够自动(不适合当前新的Index Warmup API)Solr(读作“solar”)是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是一样的。优点Solr有一个更大、更成熟的用户、开发和贡献者社区。支持添加多种格式的索引,如:HTML、PDF、微软 Office 系列软件格式以及 JSON、XML、CSV 等纯文本格式。Solr比较成熟、稳定。不考虑建索引的同时进行搜索,速度更快。缺点建立索引时,搜索效率下降,实时索引搜索效率不高。当单纯的对已有数据进行搜索时,Solr更快。当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。随着数据量的增加,Solr的搜索效率会变得更低,而Elasticsearch却没有明显的变化。综上所述,Solr的架构不适合实时搜索的应用。实际生产环境测试下图为将搜索引擎从Solr转到Elasticsearch以后的平均查询速度有了50倍的提升。
Elasticsearch 与 Solr 的比较总结二者安装都很简单;Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能;
Solr 支持更多格式的数据,而 Elasticsearch 仅支持json文件格式;
Solr 官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供;Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。
Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
其他基于Lucene的开源搜索引擎解决方案直接使用 Lucene说明:Lucene 是一个 JAVA 搜索类库,它本身并不是一个完整的解决方案,需要额外的开发工作。优点:成熟的解决方案,有很多的成功案例。apache 顶级项目,正在持续快速的进步。庞大而活跃的开发社区,大量的开发人员。它只是一个类库,有足够的定制和优化空间:经过简单定制,就可以满足绝大部分常见的需求;经过优化,可以支持 10亿+ 量级的搜索。缺点:需要额外的开发工作。所有的扩展,分布式,可靠性等都需要自己实现;非实时,从建索引到可以搜索中间有一个时间延迟,而当前的“近实时”(Lucene Near Real Time search)搜索方案的可扩展性有待进一步完善
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。