## 核心概念 ### 索引<Index> **`一个索引就是一个拥有几分相似特征的文档的集合`**。比如说,你可以有一个商品数据的索引,一个订单数据的索引,还有一个用户数据的索引。**`一个索引由一个名字来标识`**`(必须全部是小写字母的)`**,**并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。 ### 映射<Mapping> **`映射是定义一个文档和它所包含的字段如何被存储和索引的过程`**。在默认配置下,ES可以根据插入的数据`自动地创建mapping,也可以手动创建mapping`。 mapping中主要包括字段名、字段类型等 ### 文档<Document> **`文档是索引中存储的一条条数据。一条文档是一个可被索引的最小单元`**。ES中的文档采用了轻量级的JSON格式数据来表示。 --- ## 基本操作 ### 索引<index> #### 创建 ```markdown # 1.创建索引 - PUT /索引名 ====> PUT /products - 注意: 1.ES中索引健康转态 red(索引不可用) 、yellwo(索引可用,存在风险)、green(健康) 2.默认ES在创建索引时回为索引创建1个备份索引和一个primary索引 # 2.创建索引 进行索引分片配置 - PUT /products { "settings": { "number_of_shards": 1, #指定主分片的数量 "number_of_replicas": 0 #指定副本分片的数量 } } ``` ![](https://img.kancloud.cn/1f/b5/1fb50ec9a8cfb652b8287473280321ba_890x98.png) #### 查询 ```markdown # 查询索引 - GET /_cat/indices?v ``` ![](https://img.kancloud.cn/f9/71/f971d316d9d1e65c8137f0a708d61d6a_892x98.png) #### 删除 ```markdown # 3.删除索引 - DELETE /索引名 =====> DELETE /products - DELETE /* `*代表通配符,代表所有索引` ``` ![](https://img.kancloud.cn/14/1d/141d74d12b163408dc5dd70551e13c5e_898x126.png) ### 映射<mapping> #### 创建 字符串类型: keyword 关键字 关键词 、text 一段文本 数字类型:integer long 小数类型:float double 布尔类型:boolean 日期类型:date ```markdown # 1.创建索引&映射 ``` ```json PUT /products { "settings": { "number_of_shards": 1, "number_of_replicas": 0 }, "mappings": { "properties": { "title":{ "type": "keyword" }, "price":{ "type": "double" }, "created_at":{ "type": "date" }, "description":{ "type": "text" } } } } ``` ![](https://img.kancloud.cn/84/ee/84ee30181d9f31d302da2aae35d75c1f_892x534.png) > 说明: ES中支持字段类型非常丰富,如:text、keyword、integer、long、ip 等。更多参见https://www.elastic.co/guide/en/elasticsearch/reference/7.15/mapping-types.html #### 查询 ```markdown # 1.查看某个索引的映射 - GET /索引名/_mapping =====> GET /products/_mapping ``` ![](https://img.kancloud.cn/9c/76/9c76655f9b8191061d0dd8a8fa715b58_892x488.png) ### 文档<document> #### 添加文档 ```http POST /products/_doc/1 #指定文档id { "title":"iphone13", "price":8999.99, "created_at":"2021-09-15", "description":"iPhone 13屏幕采用6.1英寸OLED屏幕。" } ``` ```http POST /products/_doc/ #自动生成文档id { "title":"iphone14", "price":8999.99, "created_at":"2021-09-15", "description":"iPhone 13屏幕采用6.8英寸OLED屏幕" } ``` ```json { "_index" : "products", "_type" : "_doc", "_id" : "sjfYnXwBVVbJgt24PlVU", "_version" : 1, "result" : "created", "_shards" : { "total" : 1, "successful" : 1, "failed" : 0 }, "_seq_no" : 3, "_primary_term" : 1 } ``` #### 查询文档 ```json GET /products/_doc/1 ``` ```json { "_index" : "products", "_type" : "_doc", "_id" : "1", "_version" : 1, "_seq_no" : 0, "_primary_term" : 1, "found" : true, "_source" : { "title" : "iphone13", "price" : 8999.99, "created_at" : "2021-09-15", "description" : "iPhone 13屏幕采用6.1英寸OLED屏幕" } } ``` #### 删除文档 ```json DELETE /products/_doc/1 ``` ```json { "_index" : "products", "_type" : "_doc", "_id" : "1", "_version" : 2, "result" : "deleted", "_shards" : { "total" : 1, "successful" : 1, "failed" : 0 }, "_seq_no" : 2, "_primary_term" : 1 } ``` #### 更新文档 ```http PUT /products/_doc/sjfYnXwBVVbJgt24PlVU { "title":"iphon15" } ``` > 说明: 这种更新方式是先删除原始文档,在将更新文档以新的内容插入。 ```http POST /products/_doc/sjfYnXwBVVbJgt24PlVU/_update { "doc" : { "title" : "iphon15" } } ``` > 说明: 这种方式可以将数据原始内容保存,并在此基础上更新。 #### 批量操作 ```http POST /products/_doc/_bulk #批量索引两条文档 {"index":{"_id":"1"}} {"title":"iphone14","price":8999.99,"created_at":"2021-09-15","description":"iPhone 13屏幕采用6.8英寸OLED屏幕"} {"index":{"_id":"2"}} {"title":"iphone15","price":8999.99,"created_at":"2021-09-15","description":"iPhone 15屏幕采用10.8英寸OLED屏幕"} ``` ```http POST /products/_doc/_bulk #更新文档同时删除文档 {"update":{"_id":"1"}} {"doc":{"title":"iphone17"}} {"delete":{"_id":2}} {"index":{}} {"title":"iphone19","price":8999.99,"created_at":"2021-09-15","description":"iPhone 19屏幕采用61.8英寸OLED屏幕"} ``` > 说明:批量时不会因为一个失败而全部失败,而是继续执行后续操作,在返回时按照执行的状态返回! ----