1、ES和关系型数据库对比
Elasticsearch | 关系型数据库 |
---|---|
索引(index) | 数据库(database) |
类型(type) | 表(table) |
文档(document) | 记录(row) |
字段(field) | 字段、列(column) |
传统关系型数据库下我们查询数据是如何操作的?
以mysql为例: 创建数据库->创建表->插入数据->SQL查询
-
索引(index):
可以理解为关系型数据库的db。
-
类型(type)
一个type就类似于一个表
- 注意
- ES 5.x中一个index可以有多个type。
- ES 6.x中一个index只能有一个type。
- ES 7.x以后已经移除type,使用_doc代替。(ES 6.x也可以用)
- 注意
-
文档(document)
一个document相当于关系型数据库中的一行记录。
-
字段(field)
相当于关系型数据库表的字段
-
映射(mapping)
mapping定义了每个字段的类型等信息。相当于关系型数据库中的表字段的类型。
-
分片(shards)
因为ES是个分布式的搜索引擎, 所以index索引通常都会分解成不同部分,
而这些分布在不同节点的数据就是分片。ES自动管理和组织分片,
并在必要的时候对分片数据进行再平衡分配,
所以用户基本上不用担心分片的处理细节。
-
副本(replicas)
- 主要目的就是为了故障转移
- 副本是分片的副本。分片有主分片(primary Shard)和副本分片(replica Shard)之分。
- 一个Index在物理上被分布在多个主分片中,每个主分片只存放部分数据。
- 每个主分片可以有多个副本,叫副本分片,是主分片的复制。
-
节点(node)
一台机器或者一个进程。
-
集群(cluster)
集群由一个或多个节点组成。
2、 Elasticsearch简单操作
新增:put
-
创建索引
请求: PUT http://192.168.122.150:9200/fxindex01 响应: { "acknowledged": true, "shards_acknowledged": true, "index": "fxindex01" }
-
查看索引
请求: GET http://192.168.122.150:9200/fxindex01 响应: { "fxindex01": { "aliases": {}, "mappings": {}, "settings": { "index": { "creation_date": "1596379913761", "number_of_shards": "1", "number_of_replicas": "1", "uuid": "7I3DXIV8TnyYSO4mutxjhw", "version": { "created": "7080099" }, "provided_name": "fxindex01" } } } }
-
新增文档doc
请求: # 一个index对于一个_doc,一条document对应一个id PUT http://192.168.122.150:9200/fxindex01/_doc/1 { "name":"zhangsan", "age":20, "email":"zhangsan@qq.com" } { "_index": "fxindex01", "_type": "_doc", "_id": "1", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1 }
-
查看文档doc
请求: GET http://192.168.122.150:9200/fxindex01/_doc/1 响应: { "_index": "fxindex01", "_type": "_doc", "_id": "1", "_version": 1, "_seq_no": 0, "_primary_term": 1, "found": true, "_source": { "name": "zhangsan", "age": 20, "email": "zhangsan@qq.com" } }
-
查看索引下所有文档
GET http://192.168.122.150:9200/fxindex01/_search
-
只显示_source字段
请求: GET http://192.168.122.150:9200/fxindex01/_doc/1/_source 响应: { "name": "zhangsan", "age": 20, "email": "zhangsan@qq.com" }
-
获取文档中指定的字段
请求: GET http://192.168.122.150:9200/fxindex01/_doc/1?_source=name 响应: { "_index": "fxindex01", "_type": "_doc", "_id": "1", "_version": 1, "_seq_no": 0, "_primary_term": 1, "found": true, "_source": { "name": "zhangsan" } }
-
查看索引设置
请求: GET http://192.168.122.150:9200/fxindex01/_settings 响应: { "fxindex01": { "settings": { "index": { "creation_date": "1596379913761", "number_of_shards": "1", "number_of_replicas": "1", "uuid": "7I3DXIV8TnyYSO4mutxjhw", "version": { "created": "7080099" }, "provided_name": "fxindex01" } } } }
-
查看索引mapping
请求: GET http://192.168.122.150:9200/fxindex01/_mapping 响应: { "fxindex01": { "mappings": { "properties": { "age": { "type": "long" }, "email": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } }, "name": { "type": "text", "fields": { "keyword": { "type": "keyword", "ignore_above": 256 } } } } } } }