一、 什么是Elastic Search
ElasticSearch 是2012 年由阿姆斯特丹一家创业公司推出,一个基于 Lucene(是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构) 的一个分布式、RESTful 风格的搜索和数据分析引擎。它提供了一个分布式的全文搜索引擎,其对外服务是基于 RESTful web 接口发布的。Elasticsearch 是用 Java 开发的应用, 并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。
Elasticsearch能够提供一种简单的方式来分析PB级的信息,并帮助企业为作出实时、有效以及可行的决策挖掘相关数据
cluster
集群。ElasticSearch 集群由一或多个节点组成,其中有一个主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。ElasticSearch 的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部看 ElasticSearch 集群,在逻辑上是个整体,你与集群中的任何一个节点通信和与整个 ElasticSearch 集群通信是等价的。也就是说,主节点的存在不会产生单点安全隐患、并发访问瓶颈等问题。
shards(类似于redis机制)
主分片
primary shard:代表索引的主分片,ElasticSearch 可以把一个完整的索引(相当于数据库中的表)分成多个primary shard,这样的好处是可以把一个大的索引拆分成多个分片,分布存储在不同的ElasticSearch 节点上,从而形成分布式存储,并为搜索访问提供分布式服务,提高并发处理能力。primary shard 的数量只能在索引创建时指定,并且索引创建后不能再更改 primary shard 数量。
replica
副分片
replica shard:代表索引主分片的副本,ElasticSearch 可以设置多个 replica shard。replica shard 的作用:一是提高系统的容错性,当某个节点某个 primary shard 损坏或丢失时可以从副本中恢复。二是提高 ElasticSearch 的查询效率,ElasticSearch 会自动对搜索请求进行负载均衡,将并发的搜索请求发送给合适的节点,增强并发处理能力。
Index
索引。相当于关系型数据库中的表。其中存储若干相似结构的 Document 数据json(字段/列)。
如:客户索引,订单索引,商品索引等。ElasticSearch 中的索引不像数据库表格一样有强制的数据结构约束,在理论上,可以存储任意结构的数据。但了为更好的为业务提供搜索数据支 撑,还是要设计合适的索引体系来存储不同的数据。
Document
文档。ElasticSearch 中的最小数据单元。
一个 Document 就是一条数据,一般使用JSON 数据结构表示。
每个Index 下的Type 中都可以存储多个Document。
一个Document 中可定义多个 field, field 就是数据字段。
如: 学生数据({"name":"张三", "age":20, "gender":"男"})。
Type
类型。每个索引中都必须有唯一的一个 Type,Type 是 Index 中的一个逻辑分类。ElasticSearch 中的数据 Document 是存储在索引下的 Type 中的。
注意:ElasticSearch5.x及更低版本中,一个Index中可以有多个Type。ElasticSearch6.x版本之后,type概念被弱化,一个index中只能有唯一的一个type。且在7.x版本之后,删除type定义。
倒排索引(反向索引)
对数据进行分析,抽取出数据中的词条,以词条作为 key,对应数据的存储位置作为value(index),实现索引的存储。这种索引称为倒排索引。倒排索引是Document 写入ElasticSearch时分析维护的。
案例:
商品主键 | 商品名 | 商品描述 |
1 | 荣耀v40 | 更贵的手机 |
2 | 荣耀 50 | 相对便宜的手机 |
3 | IPHONE12 | 要卖肾买的手机 |
先找关键字
根据关键字找到索引
找到对应数据
分析结果、倒排索引 | |
词条 | 数据 |
手机 | 1,2,3 |
便宜 | 2 |
卖肾 | 3 |
相对 | 2 |
荣耀 | 1,2 |
IPHONE | 3 |