doc: update elasticsearch.md (#623)

This commit is contained in:
jaywcjlove 2024-04-23 16:11:00 +08:00
parent 5c34078de5
commit dd0d19cf1c

View File

@ -3,50 +3,55 @@ Elasticsearch 备忘清单
这是 [Elasticsearch](https://www.elastic.co/guide/index.html) 的官方文档。 你可以在这里找到 elasticsearch 的所有文档。 这是 [Elasticsearch](https://www.elastic.co/guide/index.html) 的官方文档。 你可以在这里找到 elasticsearch 的所有文档。
Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎具有HTTP Web接口和无模式JSON文档。Elasticsearch是用Java开发的并作为看源软件发布。官方客户端在Java、.NETC#、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示Elasticsearch是最受欢迎的企业搜索引擎其次是Apache Solr也是基于Lucene。
入门 入门
---- ---
<!--rehype:body-class=cols-2-->
### 入门 ### 入门
<!--rehype:wrap-class=row-span-2-->
#### 安装介绍 Elasticsearch 是一个基于 Lucene 库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎具有HTTP Web接口和无模式JSON文档。
##### 下载 #### 下载
- 注意 注意 `${VERSION}` 需替换为指定版本,官方包有的功能只能试用,完整功能需要付费,请仔细阅读官网文档。
version 需替换为指定版本 #### Windows
官方包有的功能只能试用,完整功能需要付费,请仔细阅读官网文档。 ```
https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-windows-x86_64.zip
```
<!--rehype:className=wrap-text-->
- windows #### linux
下载地址: ```shell
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz
[https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-\${VERSION}-windows-x86_64.zip](https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-windows-x86_64.zip) $ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
- linux $ shasum -a 512 -c elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
```shell $ tar -xzf elasticsearch-${VERSION}-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-${VERSION}-linux-x86_64.tar.gz.sha512
tar -xzf elasticsearch-${VERSION}-linux-x86_64.tar.gz
cd elasticsearch-${VERSION}/
```
- macos $ cd elasticsearch-${VERSION}/
```
<!--rehype:className=wrap-text-->
```shell #### macos
curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c -
tar -xzf elasticsearch-${VERSION}-darwin-x86_64.tar.gz
cd elasticsearch-${VERSION}/
```
#### 启动 ```shell
$ curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz
$ curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${VERSION}-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c -
$ tar -xzf elasticsearch-${VERSION}-darwin-x86_64.tar.gz
$ cd elasticsearch-${VERSION}/
```
<!--rehype:className=wrap-text-->
### 启动
<!--rehype:wrap-class=col-span-2-->
- 启动 Elasticsearch - 启动 Elasticsearch
@ -59,13 +64,15 @@ Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布
```shell ```shell
export ELASTIC_PASSWORD="your_password" export ELASTIC_PASSWORD="your_password"
``` ```
- 测试是否启动成功 - 测试是否启动成功
```shell ```shell
curl --cacert $ES_HOME/config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200 curl --cacert $ES_HOME/config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
``` ```
<!--rehype:className=wrap-text-->
成功则返回样例如下: - 成功则返回样例如下:
```json ```json
{ {
@ -86,10 +93,9 @@ Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布
"tagline" : "You Know, for Search" "tagline" : "You Know, for Search"
} }
``` ```
<!--rehype:className=style-timeline-->
### Elasticsearch 和 RDMS 的对比
### elasticsearch 和 RDMS 的对比
| RDMS | elasticsearch | | RDMS | elasticsearch |
| ----------------------- | ----------------- | | ----------------------- | ----------------- |
@ -103,275 +109,219 @@ Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布
| SELECT * FROM tablename | GET http://... | | SELECT * FROM tablename | GET http://... |
| UPDATE table SET | PUT http://... | | UPDATE table SET | PUT http://... |
| DELETE | DELETE http://... | | DELETE | DELETE http://... |
<!--rehype:className=left-align show-header-->
操作 操作
---- ---
说明: ### 基础语法规则
1. 以 user_info 为索引名称,类比数据库, ```shell
2. 字段有 id,username,password,nickname,age,info,remark 为例进行演示。 $ curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'
```
<!--rehype:className=wrap-text-->
# DSL语法 - `VERB HTTP` 方法GET, POST, PUT, HEAD, DELETE
- `PROTOCOL`http 或者 https 协议(只有在 Elasticsearch 前面有 https 代理的时候可用)
- `HOST`Elasticsearch 集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫 localhost
- `PORT`Elasticsearch HTTP 服务所在的端口,默认为 9200
- `PATH API 路径`例如_count 将返回集群中文档的数量PATH可以包含多个组件例如_cluster/stats 或者_nodes/stats/jvm
- `QUERY_STRING`:一些可选的查询请求参数,例如?pretty 参数将使请求返回更加美观易读的 JSON 数据
- `BODY`:一个 JSON 格式的请求主体(如果请求需要的话)
## 基础语法规则 ### 创建索引
<!--rehype:wrap-class=col-span-2 row-span-3-->
`curl -X<VERB> '<PROTOCOL>://<HOST>:<PORT>/<PATH>?<QUERY_STRING>' -d '<BODY>'` #### 统一请求 api 前缀
```
http://localhost:9200/
```
- VERB HTTP 方法GET, POST, PUT, HEAD, DELETE #### DSL语法
- PROTOCOLhttp 或者 https 协议(只有在 Elasticsearch 前面有 https 代理的时候可用) ```json
PUT /user_info
- HOSTElasticsearch 集群中的任何一个节点的主机名,如果是在本地的节点,那么就叫 localhost {
"settings": { "number_of_replicas": 1, "number_of_shards": 1 },
- PORTElasticsearch HTTP 服务所在的端口,默认为 9200
- PATH API 路径例如_count 将返回集群中文档的数量PATH可以包含多个组件例如_cluster/stats 或者_nodes/stats/jvm
- QUERY_STRING一些可选的查询请求参数例如?pretty 参数将使请求返回更加美观易读的 JSON 数据
- BODY一个 JSON 格式的请求主体(如果请求需要的话)
# 索引的操作
## 创建索引
- 统一请求 api 前缀
http://localhost:9200/
- DSL语法
```shell
PUT /user_info
{
"settings": {
"number_of_replicas": 1,
"number_of_shards": 1
},
"mappings": { "mappings": {
"properties": { "properties": {
"id": { "id": { "type": "long", "index": true },
"type": "long", "username": { "type": "keyword", "index": true },
"index": true "nickname": { "type": "keyword", "index": true },
}, "password": { "type": "keyword", "index": false },
"username": { "age": { "type": "integer", "index": true },
"type": "keyword", "info": { "type": "text", "index": true },
"index": true "remark": { "type": "text", "index": true }
},
"nickname": {
"type": "keyword",
"index": true
},
"password": {
"type": "keyword",
"index": false
},
"age": {
"type": "integer",
"index": true
},
"info": {
"type": "text",
"index": true
},
"remark": {
"type": "text",
"index": true
} }
} }
} }
} ```
```
- curl #### curl
```shell ```shell
curl -XPUT "http://localhost:9200/user_info" -H 'Content-Type: application/json' -d'{ "settings": { "number_of_replicas": 1, "number_of_shards": 1 }, "mappings": { "properties": { "id": { "type": "long", "index": true }, "username": { "type": "keyword", "index": true }, "nickname": { "type": "keyword", "index": true }, "password": { "type": "keyword", "index": false }, "age": { "type": "integer", "index": true }, "info": { "type": "text", "index": true }, "remark": { "type": "text", "index": true } } } }' curl -XPUT "http://localhost:9200/user_info" -H 'Content-Type: application/json' -d'{ "settings": { "number_of_replicas": 1, "number_of_shards": 1 }, "mappings": { "properties": { "id": { "type": "long", "index": true }, "username": { "type": "keyword", "index": true }, "nickname": { "type": "keyword", "index": true }, "password": { "type": "keyword", "index": false }, "age": { "type": "integer", "index": true }, "info": { "type": "text", "index": true }, "remark": { "type": "text", "index": true } } } }'
``` ```
<!--rehype:className=wrap-text-->
- 参数说明: #### 参数说明
settings索引信息设置 - `settings`: 设置索引的信息
- `number_of_shards`: 每个索引的主分片数,一旦索引创建后,无法修改此配置
- `number_of_replicas`: 每个主分片的副本数,此配置可随时修改
- `mappings`: 索引映射定义
- `properties`: 字段定义。使用 JSON 配置,键为字段名称(自定义),值为嵌套 JSON其中 `type` 指定字段的类型
number_of_shards每个索引的主分片数这个配置在索引创建后不能修改 其他参数很多,请参考官网资料
number_of_replicas每个主分片的副本数这个配置可以随时修改。 ### 删除索引
mappings索引映射定义 #### DSL语法
properties字段定义 properties里是json配置key为字段名称自定义名称value是个嵌套jsontype是指定字段的类型。 ```http
DELETE /user_info
```
-- 其他参数很多,请参考官网资料 #### curl
## 删除索引 ```shell
curl -XDELETE "http://localhost:9200/user_info"
```
<!--rehype:className=wrap-text-->
- DSL语法 ### 判断索引是否存在
```http #### DSL语法
DELETE /user_info
```
- curl ```http
# 查看索引是否存在
HEAD /user_info
```
```shell #### curl
curl -XDELETE "http://localhost:9200/user_info"
```
```shell
# 查看索引是否存在
curl -XHEAD "http://localhost:9200/user_info"
```
<!--rehype:className=wrap-text-->
## 判断索引是否存在 ### 开启/关闭索引
- DSL语法 #### 开启DSL语法
```http ```shell
# 查看索引是否存在 POST /user_info/_open
HEAD /user_info ```
```
- curl `curl`
```shell ```shell
# 查看索引是否存在 curl -XPOST "http://localhost:9200/user_info/_open"
curl -XHEAD "http://localhost:9200/user_info" ```
``` <!--rehype:className=wrap-text-->
## 开启/关闭索引 #### 关闭 DSL 语法
- 开启DSL语法 ```shell
POST /user_info/_close
```
```http `curl`
# 开启索引
POST /user_info/_open
```
- curl ```shell
curl -XPOST "http://localhost:9200/user_info/_close"
```
<!--rehype:className=wrap-text-->
```shell ### 索引的别名
# 开启索引 <!--rehype:wrap-class=col-span-2-->
curl -XPOST "http://localhost:9200/user_info/_open"
```
- 关闭DSL语法 - 添加别名 DSL 语法
```http ```shell
# 关闭索引 POST /user_info/_alias/user1
POST /user_info/_close ```
```
- curl
```shell
# 关闭索引
curl -XPOST "http://localhost:9200/user_info/_close"
```
## 索引的别名
- 添加别名DSL语法
```http
# 添加别名
POST /user_info/_alias/user1
```
- 添加别名curl
```shell
# 添加别名
curl -XPOST "http://localhost:9200/user_info/_alias/user1"
```
```shell
curl -XPOST "http://localhost:9200/user_info/_alias/user1"
```
- 删除别名DSL语法 - 删除别名DSL语法
```http ```shell
# 删除别名 DELETE /user_info/_alias/user1
DELETE /user_info/_alias/user1 ```
```
- 删除别名curl ```shell
curl -XDELETE "http://localhost:9200/user_info/_alias/user1"
```shell ```
# 删除别名
curl -XDELETE "http://localhost:9200/user_info/_alias/user1"
```
- 查看别名DSL语法 - 查看别名DSL语法
```http ```shell
# 查看别名 GET /_alias/user1
GET /_alias/user1 ```
```
```shell
curl -XGET "http://localhost:9200/_alias/useraa"
```
- 查看别名curl Mapping 操作
---
```shell
# 查看别名
curl -XGET "http://localhost:9200/_alias/useraa"
```
## mapping 操作
类似修改数据库中列的操作 类似修改数据库中列的操作
### 查看 mapping ### 查看 mapping
- DSL语法 #### DSL语法
```http ```shell
# 查看mapping GET /user_info/_mapping
GET /user_info/_mapping ```
```
- curl ---
```shell ```shell
# 查看mapping curl -XGET "http://localhost:9200/user_info/_mapping"
curl -XGET "http://localhost:9200/user_info/_mapping" ```
``` <!--rehype:className=wrap-text-->
### 新增 mapping ### 新增 mapping
<!--rehype:wrap-class=col-span-2-->
- 注意 #### DSL语法
**需要注意的是字段映射只能增加,不能更改删除** ```shell
PUT /user_info/_mapping
- DSL语法 {
```http
# 新增mapping
PUT /user_info/_mapping
{
"properties":{ "properties":{
"sex":{ "sex":{ "type":"keyword" }
"type":"keyword"
} }
} }
} ```
```
- curl ---
```shell ```shell
# 新增mapping curl -XPUT "http://localhost:9200/user_info/_mapping" -H 'Content-Type: application/json' -d'{ "properties":{ "sex":{ "type":"keyword" } } }'
curl -XPUT "http://localhost:9200/user_info/_mapping" -H 'Content-Type: application/json' -d'{ "properties":{ "sex":{ "type":"keyword" } } }' ```
``` <!--rehype:className=wrap-text-->
# 文档的操作 `注意`: 需要注意的是字段映射只能增加,不能更改删除
## 添加文档 文档的操作
- DSL语法 ---
```http ### 添加文档
# 新增一条数据 <!--rehype:wrap-class=row-span-2-->
POST /user_info/_doc/1
{ #### 新增一条数据 - DSL语法
```shell
POST /user_info/_doc/1
{
"id":1, "id":1,
"username":"username", "username":"username",
"password":"123456", "password":"123456",
@ -380,115 +330,103 @@ Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布
"info":"一些个人相关的介绍", "info":"一些个人相关的介绍",
"remark":"备注信息", "remark":"备注信息",
"sex":"男" "sex":"男"
} }
``` ```
- curl ---
```shell ```shell
# 新增一条数据 curl -XPOST "http://localhost:9200/user_info/_doc/1" -H 'Content-Type: application/json' -d'{ "id":1, "username":"username", "password":"123456", "nickname":"nickname", "age":18, "info":"一些个人相关的介绍", "remark":"备注信息", "sex":"男" }'
curl -XPOST "http://localhost:9200/user_info/_doc/1" -H 'Content-Type: application/json' -d'{ "id":1, "username":"username", "password":"123456", "nickname":"nickname", "age":18, "info":"一些个人相关的介绍", "remark":"备注信息", "sex":"男" }' ```
``` <!--rehype:className=wrap-text-->
### 查询指定索引的所有文档
<!--rehype:wrap-class=row-span-2-->
## 查询指定索引的所有文档 类似数据库中的 `select * from user_info;`
- 类似数据库中的 `select * from user_info;` #### DSL语法
- DSL语法 ```json
GET /user_info/_search
```http {
GET /user_info/_search
{
"query": { "query": {
"match_all": {} "match_all": {}
} }
} }
``` ```
- curl ---
```shell ```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "match_all": {} } }' curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "match_all": {} } }'
``` ```
<!--rehype:className=wrap-text-->
## 通过 id 查询文档 ### 通过 id 查询文档
- 类似数据库中的 `select * from user_info where id = 1;` 类似数据库中的 `select * from user_info where id = 1;`
- DSL语法 #### DSL语法
```http ```shell
# 通过id查询 GET /user_info/_doc/1
GET /user_info/_doc/1 ```
```
- curl ---
```shell ```shell
# 通过id查询 curl -XGET "http://localhost:9200/user_info/_doc/1"
curl -XGET "http://localhost:9200/user_info/_doc/1" ```
``` <!--rehype:className=wrap-text-->
## 通过条件查询文档
### 精确查找
- 类似数据库中的 `select * from user_info where username = 'username';`
- DSL语法
```http
# 通过条件查询
GET /user_info/_search
{
"query": {
"bool": {
"must": [
{ "term": { "username": "username" } }
]
}
}
}
```
- curl
```shell
# 通过条件查询
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "term": { "username": "username" } } ] } } }'
```
### 模糊查找 ### 模糊查找
- 类似数据库中的模糊查询 `select * from user_info where info like '%人%';` 类似数据库中的模糊查询 `select * from user_info where info like '%人%';`
- DSL语法 #### DSL语法
```http ```json
# 模糊查找 GET /user_info/_search
GET /user_info/_search {
{ "query": { "match": { "info": "人" } }
}
```
### 通过条件查询文档
<!--rehype:wrap-class=col-span-2-->
类似数据库中的 `select * from user_info where username = 'username';`
#### 通过条件查询 - DSL语法
```json
GET /user_info/_search
{
"query": { "query": {
"match": { "bool": {
"info": "人" "must": [ { "term": { "username": "username" } } ]
} }
} }
} }
``` ```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "term": { "username": "username" } } ] } } }'
```
<!--rehype:className=wrap-text-->
### 范围查找 ### 范围查找
- 类似数据库中的范围查询 `select * from user_info where age between 18 and 30;` 类似数据库中的范围查询 `select * from user_info where age between 18 and 30;`
- DSL语法 #### DSL语法
```http ```json
GET /user_info/_search GET /user_info/_search
{ {
"query": { "query": {
"range": { "range": {
"age": { "age": {
@ -497,75 +435,26 @@ Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布
} }
} }
} }
} }
``` ```
- curl ---
```shell ```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "range": { "age": { "gt": 18, "lt": 30 } } } }' curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "range": { "age": { "gt": 18, "lt": 30 } } } }'
``` ```
<!--rehype:className=wrap-text-->
### limit 查找
- 类似数据库中的 limit 查询 `select * from user_info limit 10;`
- DSL语法
```http
GET /user_info/_search
{
"size": 10,
"query": {
"match_all": {}
}
}
```
- curl
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 1, "query": { "match_all": {} } }'
```
### limit offset 查找
- 类似数据库中的 limit 查询 `select * from user_info limit 0,10;`
- DSL语法
```http
GET /user_info/_search
{
"size": 2,
"from": 1,
"query": {
"match_all": {}
}
}
```
- curl
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 2, "from": 1, "query": { "match_all": {} } }'
```
- 参数说明
- "size": 10表示我们想要返回的结果数量是10条。
- "from": 20表示我们想要从结果集中的第21条记录开始返回因为偏移是从0开始的
- "query": `{"match_all": {}}` 是一个匹配所有文档的查询,因为我们没有特定的查询条件,只是想要分页结果。
### and 查询 ### and 查询
<!--rehype:wrap-class=col-span-2-->
- 类似数据库中的 and 查询 `select * from user_info where age > 18 and sex = '男';` 类似数据库中的 and 查询 `select * from user_info where age > 18 and sex = '男';`
- DSL语法 #### DSL语法
```http ```json
GET /user_info/_search GET /user_info/_search
{ {
"query": { "query": {
"bool": { "bool": {
"must": [ "must": [
@ -574,92 +463,144 @@ Elasticsearch是一个基于Lucene库的搜索引擎。它提供了一个分布
] ]
} }
} }
}
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "range": { "age": { "gt": 17 } } }, { "term": { "sex": "男" } } ] } } }'
```
<!--rehype:className=wrap-text-->
### limit 查找
类似数据库中的 limit 查询 `select * from user_info limit 10;`
#### DSL语法
```json
GET /user_info/_search
{
"size": 10,
"query": {
"match_all": {}
} }
``` }
```
- curl ---
```shell ```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "must": [ { "range": { "age": { "gt": 17 } } }, { "term": { "sex": "男" } } ] } } }' curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 1, "query": { "match_all": {} } }'
``` ```
<!--rehype:className=wrap-text-->
### limit offset 查找
类似数据库中的 limit 查询 `select * from user_info limit 0,10;`
#### DSL语法
```http
GET /user_info/_search
{
"size": 2,
"from": 1,
"query": {
"match_all": {}
}
}
```
---
```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "size": 2, "from": 1, "query": { "match_all": {} } }'
```
<!--rehype:className=wrap-text-->
#### 参数说明
- `size`: 10 表示我们想要返回的结果数量是10条
- `from`: 20 表示我们想要从结果集中的第21条记录开始返回因为偏移是从0开始的
- `query`: `{"match_all": {}}` 是一个匹配所有文档的查询,因为我们没有特定的查询条件,只是想要分页结果
### or 查询 ### or 查询
<!--rehype:wrap-class=col-span-2-->
- 类似数据库中的 or 查询 `select * from user_info where age > 18 or sex = '男';` 类似数据库中的 or 查询 `select * from user_info where age > 18 or sex = '男';`
- DSL语法 #### DSL语法
```http ```json
GET /user_info/_search GET /user_info/_search
{ {
"query": { "query": {
"bool": { "bool": {
"should": [ "should": [
{ {
"range": { "range": {
"age": { "age": { "gt": 18 }
"gt": 18
}
} }
}, },
{ {
"term": { "term": { "sex": "男" }
"sex": "男"
}
} }
] ]
} }
} }
} }
``` ```
- curl ---
```shell ```shell
curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "should": [ { "range": { "age": { "gt": 18 } } }, { "term": { "sex": "男" } } ] } } }' curl -XGET "http://localhost:9200/user_info/_search" -H 'Content-Type: application/json' -d'{ "query": { "bool": { "should": [ { "range": { "age": { "gt": 18 } } }, { "term": { "sex": "男" } } ] } } }'
``` ```
<!--rehype:className=wrap-text-->
删除文档
## 删除文档 ---
### 删除指定 id ### 删除指定 id
- 类似数据库中的 delete 查询 `delete from user_info where id = 3;` 类似数据库中的 delete 查询 `delete from user_info where id = 3;`
- DSL语法 #### DSL语法
```http ```shell
# 删除文档 # 删除文档
DELETE /user_info/_doc/3 DELETE /user_info/_doc/3
``` ```
- curl ---
```shell ```shell
# 删除文档 # 删除文档
curl -XDELETE "http://localhost:9200/user_info/_doc/3" curl -XDELETE "http://localhost:9200/user_info/_doc/3"
``` ```
<!--rehype:className=wrap-text-->
### 删除指定条件 ### 删除指定条件
<!--rehype:wrap-class=col-span-2-->
- 类似数据库中的 delete 查询 `delete from user_info where age > 18;` 类似数据库中的 delete 查询 `delete from user_info where age > 18;`
- DSL语法 #### DSL语法
```http ```json
POST /user_info/_delete_by_query POST /user_info/_delete_by_query
{ {
"query": { "query": {
"range": { "range": { "age": { "gt": 18 } }
"age": {
"gt": 18
} }
} }
} ```
}
```
- curl
```shell ---
curl -XPOST "http://localhost:9200/user_info/_delete_by_query" -H 'Content-Type: application/json' -d'{"query":{"range":{"age":{"gt":18}}}}'
``` ```shell
curl -XPOST "http://localhost:9200/user_info/_delete_by_query" -H 'Content-Type: application/json' -d'{"query":{"range":{"age":{"gt":18}}}}'
```
<!--rehype:className=wrap-text-->