Files
rikako-note/elastic search/es尚硅谷.md
2024-04-21 23:55:49 +08:00

303 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 // 该字段内容不可被索引,在索引查询时将该字段设置为查询条件会报错
}
}
}
```