开发学院

您的位置:首页>教程>正文

教程正文

ElasticSearch 7 基础概念

  ElasticSearch是一个基于Apache Lucene的搜索服务器。它由谢伊·巴农(Shay Banon)开发,于2010年出版。它现在由ElasticSearch公司维护。截止到2019年6月19日,它的最新版本是7.1.1。

  ElasticSearch是一个实时分布式开源全文搜索和分析引擎。它可以从RESTful网络服务接口访问,并使用无模式JSON (JavaScript对象符号)文档来存储数据。它建立在Java编程语言之上,使ElasticSearch能够在不同的平台上运行。它使用户能够以非常高的速度浏览非常大量的数据。

ElasticSearch的特点

  •   ElasticSearch最多可扩展到千兆字节的结构化和非结构化数据。

  •   ElasticSearch可以用来替代像MongoDB和RavenDB这样的文档存储。

  •   ElasticSearch使用反规范化来提高搜索性能。

  •   ElasticSearch(ElasticSearch)是流行的企业搜索引擎之一,目前正被维基百科、卫报、StackOverflow、GitHub等许多大组织使用。

  •   ElasticSearch是开源的,在Apache许可版本2.0下可用。

ElasticSearch关键概念

  •   Node(节点):它指的是ElasticSearch的单个运行实例。单个物理和虚拟服务器可容纳多个节点,具体取决于其物理资源(如内存、存储和处理能力)的能力。

  •   Cluster(集群):它是一个或多个节点组成的集合。集群为整个数据提供跨节点的索引和搜索功能。

  •   Index(索引):包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引,索引有一个名称。一个index包含很多document,一个index就代表了一类类似的或者相同的Document。比如说建立一个商品索引,里面可能就存放了所有的商品数据。

  •  Type/Mapping(类型/映射):它是共享同一索引中一组公共字段的文档集合。例如,索引包含社交网络应用程序的数据,然后可以有特定类型的用户简档数据、另一种类型的消息数据和另一种类型的评论数据。

  •   Document(文档):它是以JSON格式定义的特定方式的字段集合。每个文档都属于一个类型,并驻留在一个索引中。每个文档都有一个唯一的标识符,称为UID。

  •   Shard(分片):单台机器无法存储大量数据,ElasticSearch可以将一个索引中的数据切分为多个Shard,分布在多台服务器上存储。有了Shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。

  •   Replicas(副本):服务器随时可能故障或宕机,此时Shard可能就会丢失,因此可以为每个Shard创建多个Replica副本。Replica可以在Shard故障时提供备用服务,保证数据不丢失,多个Replica还可以提升搜索操作的吞吐量和性能。

ElasticSearch的优势

  •   ElasticSearch是在Java上开发的,这使得它在几乎每个平台上都是兼容的。

  •   ElasticSearch是实时的,换句话说,一秒钟后添加的文档可以在这个引擎中搜索。

  •   ElasticSearch是分布式的,这使得它易于在任何大组织中扩展和集成。

  •   通过使用ElasticSearch中的网关概念,创建完整备份很容易。

  •   与Apache Solr相比,在ElasticSearch中处理多用户非常容易。

  •   ElasticSearch使用JSON对象作为响应,这使得用大量不同的编程语言调用ElasticSearch服务器成为可能。

  •   ElasticSearch支持几乎所有文档类型,除了那些不支持文本呈现的。

ElasticSearch的缺点

  •   ElasticSearch在处理请求和响应数据方面没有提供多语言支持(仅在JSON中可能),这与Apache Solr不同,Apache Solr中可能有CSV、XML和JSON格式。

  •   ElasticSearch也有分裂的问题,但在极少数情况下。

ElasticSearch与关系数据库系统的比较

  在ElasticSearch中,索引是类型的集合,正如数据库是关系数据库管理系统中表的集合一样。每个表都是行的集合,就像每个映射都是JSON对象ElasticSearch的集合一样。

ElasticSearchRDBMS
IndexDatabase
ShardShard
MappingTable
FieldField
JSON ObjectTuple