ElasticSearch快速入门-理论基础篇| 8月更文挑战

609 阅读8分钟

一、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的开源搜索引擎,为搜索引擎(全文检索,高亮,搜索推荐等)提供了检索的能力。
  1. Stack Overflow(国外的程序异常讨论论坛),IT问题,程序的报错,提交上去,有人会跟你讨论和回答,全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案;
  2. GitHub(开源代码管理),搜索上千亿行代码;
  3. 电商网站,检索商品;
  4. 日志数据分析,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更快。

image.png

  • 当实时建立索引时, Solr会产生io阻塞,查询性能较差, Elasticsearch具有明显的优势。

image.png

  • 大型互联网公司,实际生产环境测试,将搜索引擎从Solr转到 Elasticsearch以后的平均查询速度有了50倍的提升。

image.png

总结:

  • Solr 利用 Zookeeper 进行分布式管理,而Elasticsearch 自身带有分布式协调管理功能。
  • Solr 支持更多格式的数据,比如JSON、XML、CSV,而 Elasticsearch 仅支持json文件格式。
  • Solr 在传统的搜索应用中表现好于 Elasticsearch,但在处理实时搜索应用时效率明显低于 Elasticsearch。
  • Solr 是传统搜索应用的有力解决方案,但 Elasticsearch更适用于新兴的实时搜索应用。

5 ElasticSearch与关系型数据库对比

ElasticSearchIndex(索引)Type(类型)Document(文档)Field(字段)
关系型数据库DataBase(数据库)Table(表)Row(行)Column(列)

二、全文检索

1. 什么是全文检索?

全文检索(Full-text Search):先建立索引,再对索引进行搜索的过程就叫全文检索。

假如有一段内容,针对单词建立索引,并保存该单词在文章的位置、以及出现的次数。用户查询时,通过之前建立好的索引来查询,将索引中单词对应的文本位置、出现的次数返回给用户,因为有了具体文本的位置,所以就可以将具体内容读取出来了。

2. 什么是倒排索引?

索引就类似于目录,平时我们使用的都是索引,都是通过主键定位到某条数据,那么倒排索引呢,刚好相反,数据对应到主键

image.png

三、ElasticSearch核心概念

1. Index

Index(索引)可以狭隘的理解为对应关系型数据库中的DataBase(个人理解为对应一张宽表6CB14525.png),一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。

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)互相学习、互相交流。