一、索引相关基础操作
1. 获取所有的索引
GET /_cat/indices?v
2. 创建一个名叫 customer 的索引
PUT /customer?pretty
3. 删除名 customer 的索引
DELETE /customer?
二、文档相关基础操作
1. 向 customer 索引中加入一个文档 ( 指出 id )
PUT /customer/_doc/1?pretty
{
"name": "hahaha"
}
2. 向customer索引中加入一个文档 ( 不指出id )
POST /customer/_doc?pretty
{
"name": "Jane Doe"
}
3. 查看一下 customer 里面为 1 的文档
GET /customer/_doc/1?pretty
4. 删除 _id 为 2 的文档
DELETE /customer/_doc/1?pretty
5. 更改 _id 为 1 的文档的 name
POST /customer/_doc/1/_update?pretty
{
"doc": {"name": "Selina" }
}
6. 更改 _id 为 1 的文档的 name 和 age
POST /customer/_doc/1/_update?pretty
{
"doc": {"name": "Jane Doe", "age": 20}
}
7. 在一次批量操作里索引两个文档
POST /customer/_doc/_bulk?pretty
{"index": {"_id": "1"}}
{"name": "Selina update"}
{"index": {"_id": "2"}}
{"name": "Jane Doe"}
8. 一次批量操作里修改 1,删除 2,任何一个操作失败都将继续执行
POST /customer/_doc/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": {"name": "Selina update Sunny"}}
{"delete":{"_id": "2"}}
三、搜索相关操作
1. 搜索 bank 索引里搜索所有,按 account_number 降序
1) request API方式
GET /bank/_search?q=*&sort=account_number:desc&pretty
2) request body方式
GET /bank/_search
{
"query": { "match_all": {} },
"sort": [
{"account_number": "asc"}
]
}
2. match_all 表示指定索引里对所有文件进行搜索,from 如果未指定默认为0,搜索从 10 开始以后的 10 个文档
GET /bank/_search
{
"query": { "match_all": {}},
"from":10,
"size":10,
"sort":{"balance":"desc"}}
}
3. 返回 address 包含 Mill 或 lane
GET /bank/_search
{
"query":{"match": {
"address": "Mill lane"
}}
}
4. 返回 address 包含 ‘mill lane’ 这个短语
GET /bank/_search
{
"query": {"match_phrase": {
"address": "mill lane"
}}
}
- bool must表示子句都必须为true才算被匹配到
- bool should表示子句任何一个为true就算被匹配到 bool
- must_not表示两个子句都为false才算被匹配到
GET /bank/_search
{
"query":{
"bool": {
"must_not": [
{"match": {"address": "mill"}}, {"match": {"address": "lane"}}
]
}
}
}
5. 搜索 age 为 40,state 不为 ID 的
GET /bank/_search
{
"query":{
"bool": {
"must": [
{"match": {
"age": "40"
}}
],
"must_not": [
{"match": {
"state": "ID"
}}
]
}
}
}
6. 按 state 分组所有账户,然后按 count 递减排序返回前 10 个 size 设置为 0,表示不展示搜索命中的 hits,因为我们只想看到聚合结果
GET /bank/_search
{
"size":0,
"aggs":{
"group_by_state":{
"terms": {
"field": "state.keyword"
}
}
}
}
7. 分组后计算出每一组的 banlance 平均值
GET /bank/_search
{
"size":0,
"aggs": {
"group_by_state": {
"terms": {
"field": "state.keyword",
"order": {
"average_balance": "desc"
}
},
"aggs":{
"average_balance":{
"avg": {
"field": "balance"
}
}
}
}
}
}
8. 先按年龄段分组,然后按性别分组,然后取 balance 平均数
GET /bank/_search
{
"size": 0,
"aggs": {
"group_by_age": {
"range": {
"field": "age",
"ranges": [
{
"from": 20,
"to": 30
},
{
"from": 30,
"to": 40
},
{
"from": 40,
"to": 50
}
]
},
"aggs": {
"group_by_gender": {
"terms": {
"field": "gender.keyword"
},
"aggs": {
"average_balance": {
"avg": {
"field": "balance"
}
}
}
}
}
}
}
}