diff --git a/elastic search/es尚硅谷.md b/elastic search/es尚硅谷.md new file mode 100644 index 0000000..46c6a4b --- /dev/null +++ b/elastic search/es尚硅谷.md @@ -0,0 +1,302 @@ +# Elastic Search +## 倒排索引 +ES为文档型数据库,重要用于全文检索数据。ES通过倒排索引来加速全文检索。 +## 索引基础操作 +### 索引创建 +若要创建自定义索引,可向ES服务器发送`PUT`请求。 + +``` +PUT http://${url}:${port}/${ind_name} +``` + + +PUT请求具有幂等性,如果对相同名称索引进行重复创建,那么第二次创建索引时请求会失败,提示待创建索引已经存在。 + +### 索引查询 +如果想要查询已经创建的索引信息,可以向ES发送`GET`请求。 + +``` +GET http://${url}:${port}/${ind_name} +``` + +### 查看所有索引 + +``` +GET http://${url}:${port}/_cat/indices?v +``` + +### 删除索引 +如果想要删除已经存在的索引,可以向ES发送`DELETE`请求。 + +``` +DELETE http://${url}:${port}/${ind_name} +``` + +### 向索引中添加数据 +可以通过向ES发送`POST`请求来向索引中添加文档内容,其中待添加数据为JSON格式 +``` +POST http://${url}:${port}/${ind_name}/_doc + +==========JSON CONTENT BODY============= +``` + +向索引中添加内容是非幂等的,一个索引中可以包含多条数据。 + +### 查询索引中所有的数据 +``` +GET http://${url}:${port}/${ind_name}/_search +``` +### 修改索引中指定文档的内容 +如果要对索引中的文档内容进行修改,有两种修改的方式: +- 覆盖性修改,用新内容覆盖旧内容 +- 局部修改,只针对原JSON格式数据中的部分内容进行修改 + +#### 覆盖性修改 +如果要对索引中的文档进行覆盖性修改,可以向ES发送`PUT`请求: +``` +PUT http://${url}:${port}/${ind_name}/_doc/${doc_id} + +==========JSON CONTENT BODY============= +``` + +#### 局部数据更新 +如果要对索引中的文档内容进行部分更新,可以向ES发送`POST`请求: +``` +POST http://${url}:${port}/${ind_name}/_update/${doc_id} + +==========JSON CONTENT BODY============= +``` +### 对索引中的文档内容进行删除 +``` +DELETE http://${url}:${port}/${ind_name}/_doc/${doc_id} +``` + +### 索引内容条件查询 +通过GET请求进行索引中文档的条件查询 +``` +GET http://${url}:${port}/${ind_name}/_search?q=${doc_field_name}:${doc_field_val} +``` + +通过POST请求进行索引中文档的条件查询 +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "query":{ + "match":{ + "category":"sword" + } + } +} +``` + +查询索引中所有的文档 +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "query":{ + "match_all":{ + } + } +} +``` + +### 索引内容分页查询 +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "query":{ + "match_all":{ + }, + "from":0, // 查询偏移量,从0开始 + "size":10 // 查询条数 + } +} +``` +### 索引中只查询文档的特定字段 +如下示例只查询了文档中title和category字段的内容 +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "query":{ + "match_all":{ + }, + "from":0, // 查询偏移量,从0开始 + "size":10, // 查询条数 + "_source":[ + "title", + "category" + ] + } +} +``` + +### 索引查询后对查询结果排序 +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "query":{ + "match_all":{ + }, + "from":0, // 查询偏移量,从0开始 + "size":10, // 查询条数 + "_source":[ + "title", + "category" + ], + "sort":{ + "price":{ + "order":"desc" + } + } + } +} +``` + +### 多个查询条件进行组合 +#### and +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "query":{ + "bool":{ + "must":[ + { + "match":{ + "category":"sword" + } + }, + { + "match":{ + "price":100 + } + } + ] + } + } +} +``` +#### or +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "query":{ + "bool":{ + "should":[ + { + "match":{ + "category":"sword" + } + }, + { + "match":{ + "price":100 + } + } + ] + } + } +} +``` + +### 索引范围查询 +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "query":{ + "bool":{ + "should":[ + { + "match":{ + "category":"sword" + } + }, + { + "match":{ + "price":100 + } + } + ], + "filter":{ + "range":{ + "price":{ + "gt":1000 + } + } + } + } + } +} +``` + + +### 索引分组查询 +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "aggs":{ + ${group_name}:{ + "terms":{ + "field":"price" + } + } + }, + "size":0 // 只展示聚合后的结果,不展示原始数据 +} +``` + +### 统计求平均值 +``` +POST http://${url}:${port}/${ind_name}/_search + +{ + "aggs":{ + ${group_name}:{ + "avg":{ + "field":"price" + } + } + }, + "size":0 // 只展示统计后的结果,不展示原始数据 +} +``` + +### 索引字段配置 +可以通过如下方式来配置索引信息 +``` +POST http://${url}:${port}/${ind_name}/_mapping + + +{ + "properties":{ + ${field_1}:{ + "type":"text", // 该字段内容可被分词 + "index":true // 该字段内容可被索引 + }, + ${field_2}:{ + "type":"keyword", // 该字段内容不可被分词 + "index":true // 该字段内容可被索引 + }, + ${field_3}:{ + "type":"keyword", // 该字段内容不可被分词 + "index":false // 该字段内容不可被索引,在索引查询时将该字段设置为查询条件会报错 + } + } +} +``` + + + + + + + +