一、ElasticSearch概述
1. ElasticSearch 是什么?
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
官网文档连接:www.elastic.co/cn/what-is/…
2. ElasticSearch 使用场景
- 存储 ElasticSearch天然支持分布式,具备存储海量数据的能力,其搜索和数据分析的功能都建立在ElasticSearch存储的海量的数据之上;ElasticSearch很方便的作为海量数据的存储工具,特别是在数据量急剧增长的当下,ElasticSearch结合爬虫等数据收集工具可以发挥很大用处。
- 搜索
ElasticSearch使用
倒排索引
,每个字段都被索引且可用于搜索,更是提供了丰富的搜索api,在海量数据下近实时实现近秒级的响应,基于Lucene的开源搜索引擎,为搜索引擎(全文检索,高亮,搜索推荐等)提供了检索的能力。
- Stack Overflow(国外的程序异常讨论论坛),IT问题,程序的报错,提交上去,有人会跟你讨论和回答,全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案;
- GitHub(开源代码管理),搜索上千亿行代码;
- 电商网站,检索商品;
- 日志数据分析,logstash采集日志,ElasticSearch进行复杂的数据分析(ELK技术,elasticsearch+logstash+kibana);
- 数据分析 ElasticSearch也提供了大量数据分析的api和丰富的聚合能力,支持在海量数据的基础上进行数据的分析和处理。具体场景: 爬虫爬取不同电商平台的某个商品的数据,通过ElasticSearch进行数据分析(各个平台的历史价格、购买力等等);
摘录:www.cnblogs.com/cdchencw/p/…
3 ElasticSearch与Lucene的关系
Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库(框架),但是想要使用Lucene,必须使用Java来作为开发语言并将其直接集成到你的应用中,并且Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。
Lucene缺点
:
- 只能在Java项目中使用,并且要以jar包的方式直接集成项目中。
- 使用非常复杂-创建索引和搜索索引代码繁杂。
- 不支持集群环境-索引数据不同步(不支持大型项目)。
- 索引数据如果太多就不行,索引库和应用所在同一个服务器,共同占用硬盘.共用空间少。
上述Lucene框架中的缺点,ES全部都能解决
。
4 ElasticSearch与Solr对比
- 当单纯的对已有数据进行搜索时,Solr更快。
- 当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。
- 大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到 Elasticsearch以后的平均查询速度有了50倍的提升。
总结:
- Solr 利用 Zookeeper 进行分布式管理,而Elasticsearch 自身带有分布式协调管理功能。
- Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
- Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。
- Solr 是传统搜索应用的有力解决方案,但 Elasticsearch更适用于新兴的实时搜索应用。
5 ElasticSearch与关系型数据库对比
ElasticSearch | Index(索引) | Type(类型) | Document(文档) | Field(字段) |
---|---|---|---|---|
关系型数据库 | DataBase(数据库) | Table(表) | Row(行) | Column(列) |
二、全文检索
1. 什么是全文检索?
全文检索(Full-text Search):先建立索引,再对索引进行搜索的过程就叫全文检索。
假如有一段内容,针对单词建立索引,并保存该单词在文章的位置、以及出现的次数。用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内容读取出来了。
2. 什么是倒排索引?
索引就类似于目录,平时我们使用的都是索引,都是通过主键定位到某条数据
,那么倒排索引
呢,刚好相反,数据对应到主键
。
三、ElasticSearch核心概念
1. Index
Index(索引)可以狭隘的理解为对应关系型数据库中的DataBase(个人理解为对应一张宽表),一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。
2. Mapping
ElasticSearch中的映射(Mapping)用来定义一个文档
mapping是处理数据的方式和规则方面做一些限制,如某个字段的数据类型、默认值、分词器、是否被索引等等,这些都是映射里面可以设置的。mapping分为:静态映射和动态映射。
3. Field
相当于是数据表的字段|列
4. Type
每一个字段都应该有一个对应的类型,例如:Text、Keyword、Byte等
5. Document
文档(document)对应关系型数据库表中的一行记录,一个文档是一个可被索引的基础信息单元,文档以JSON(Javascript Object Notation)格式来表示;
6. Node
节点(Node) 一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能
一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中
这意味着,如果在网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中
在一个集群里,可以拥有任意多个节点。而且,如果当前网络中没有运行任何Elasticsearch节点,这时启动一个节点,会默认创建并加入一个叫做“elasticsearch”的集群。
7. Cluster
集群(cluster)一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能
8. Shards
分片(shard)
一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有10亿文档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫做分片。即数据一个节点存不下,分散到多个节点上进行存储。每个节点存一部分数据。分片主要有两方面的原因:
- 允许水平分割/扩展你的内容容量
- 允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
当创建一个索引的时候,可以指定你想要的分片的数量,每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。
至于一个分片怎样分布,它的文档怎样聚合回搜索请求,是完全由Elasticsearch管理的,对于作为用户来说,这些都是透明的。
9. replicas
副本(replica)在分片/节点失败的情况下,副本提供了高可用性。
复制分片(副本)从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
副本可以扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行运行。
一旦设置了副本,每个索引就有了主分片和副本分片,分片和副本的数量可以在索引创建的时候指定在索引创建之后,可以在任何时候动态地改变副本的数量,但是不能改变分片的数量。
四、总结
本篇简单介绍了下ElasticSearch快速入门应该掌握的一些理论知识,只有了解了这些概念,才能进一步了解es的工作机制。下一篇将介绍es的集群安装,敬请大家期待。
欢迎大家关注微信公众号(MarkZoe)互相学习、互相交流。