阅读es相关文档
This commit is contained in:
302
elastic search/es尚硅谷.md
Normal file
302
elastic search/es尚硅谷.md
Normal file
@@ -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 // 该字段内容不可被索引,在索引查询时将该字段设置为查询条件会报错
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user