ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # 常用术语 * Document 文档数据(可以理解mysql的行) * Index 索引 (可以理解为mysql中的一个数据库) * Type索引中的数据类型 (mysql中表的概念) * Field字段,文档属性 (比如用户的字段,他会有年龄,性别这些等等) * Query DSL查询语法 | MySQL | ElasticSearch | | --- | --- | | Database | Index | | Table | Type | | Row | Document | | Column | Field | | Schema | Mapping | | Index | Everything is indexed | | SQL | Query DSL | | select sql | GET http:// | | update sql | PUT http:// | 只要在这个集群里面,新加入的节点能自动被发现 elasticsearch各个节点都是对等关系的,目的就是去中心化. **master节点只是多了一个维护集群状态的功能,master如果出了故障,其他节点能立即顶上去** * Node(节点): 单个的装有Elasticsearch服务并且提供故障转移和扩展的服务器 * Cluster(集群): 一个集群就是由一个或多个node组织在一起的,共同工作,共同分享整个数据具有负载均衡功能的集群 * Document(文档): 一个文档是一个可被索引的基础信息单元 * Index(索引): 索引就是一个拥有几分相似特征的文档的集合 * Type(类型): 一个索引中,你可以定义一种或者多种类型 * Field(列): Field是Elasticsearch的最小单位,相当于数据的某一列 * Shards(分片): Elasticsearch将索引分成若干份,每个部分就是一个shard * Replicas(复制): Replicas是索引一份或者多份拷贝 # 基本概念 **cluster** 代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。 **shards** 代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。 **replicas** 代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。 **recovery** 代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。 **river** 代表es的一个数据源,也是其它存储方式(如:数据库)同步数据到es的一个方法。它是以插件方式存在的一个es服务,通过读取river中的数据并把它索引到es中,官方的river有couchDB的,RabbitMQ的,Twitter的,Wikipedia的。 **gateway** 代表es索引快照的存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个es集群关闭再重新启动时就会从gateway中读取索引备份数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。 **discovery.zen** 代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。 **Transport** 代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)、thrift、servlet、memcached、zeroMQ等的传输协议(通过插件方式集成)。 # 倒排索引 ![](https://img.kancloud.cn/b4/37/b437858cc89ea0fcb1c346d3afbed58f_768x212.png) 然后我们根据这个单词集合和文档集合它们进行运算,就能得到一个矩阵 ![](https://img.kancloud.cn/40/c2/40c2a0d4436e534949b79f53eb760241_628x183.png) ![](https://img.kancloud.cn/3c/f4/3cf4848dd2b0f90035dc9f0a1b86c19b_780x101.png) 这个结果其实是个数据结构, 可以用这样的表来表示 ![](https://img.kancloud.cn/e3/8a/e38af3044e5776d64e893fadf7e8690d_750x465.png) 上面的第一行(1,)意思是乔布斯这个单词在文档1中出现过,并且在文档1中的3和11位置 第二张表有TF,表示出现的频率,第二张表是额外记录出现的频率 把关键词文档还有出现的位置,一条条记录下来 ![](https://img.kancloud.cn/97/e0/97e067730c365eb58c3d5f0155124ee6_776x152.png)