今天继续学习 ES 的操作,书接上回。没看过的可以先看之前的文章。
回顾一些之前的操作,下面继续学习新的操作。
9.高亮显示
GET xxx/_search
{
"query":{
"match":{
"name": "张三 李四"
}
},
"highlight": {
"fields": {
"name": {}
}
}
}
10.聚合
在 Elasticsearch 中,支持聚合操作,类似 SQL 中的 group by
操作。
GET xxx/_search
{
"aggs": {
"all_interests": {
"terms": {
"field": "age.keyword"
}
}
}
}
结果就是按照 age 的值进行聚合,并 count。
11.指定响应字段
在响应的数据中,如果我们不需要全部的字段,可以指定某些需要的字段进行返回。
GET xxx/_doc/1001?_source=id,name
等价于:
GET xxx/_search
{
"query": {
"match": {
"id": "1001"
}
},
"_source": ["id","name"]
}
12.判断文档是否存在
如果我们只需要判断文档是否存在,而不是查询文档内容,那么可以:
HEAD xxx/_doc/1001
存在返回:200 - OK
不存在返回:404 – Not Found
13.批量操作
13.1 批量查询
POST xxx/_doc/_mget
{
"ids" : [ "1001", "1003" ]
}
13.2 _bulk 操作
批量的插入、修改、删除操作都是通过 _bulk 的 api 完成的。
请求格式如下:
{ action: { metadata }}\n
{ request body }\n
{ action: { metadata }}\n
{ request body }\n
...
批量插入数据:
POST _bulk
{"create":{"_index":"xxxindex","_id":2001}}
{"id":2001,"name":"name1","age": 20,"sex": "男"}
{"create":{"_index":"xxxindex","_id":2002}}
{"id":2002,"name":"name2","age": 20,"sex": "男"}
{"create":{"_index":"xxxindex","_id":2003}}
{"id":2003,"name":"name3","age": 20,"sex": "男"}
批量删除数据:
POST _bulk
{"delete":{"_index":"xxxindex","_id":2001}}
{"delete":{"_index":"xxxindex","_id":2002}}
{"delete":{"_index":"xxxindex","_id":2003}}
14.分页
和 SQL 使用 LIMIT 关键字返回只有一页的结果一样,Elasticsearch 接受 from 和 size 参数:
- size: 结果数,默认10
- from: 跳过开始的结果数,默认0
如果你想每页显示5个结果,页码从1到3,那请求如下:
GET /_search?size=5
GET /_search?size=5&from=5
GET /_search?size=5&from=10
15.terms 查询
terms 跟 term 有点类似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配:
POST xxx/_search
{
"query" : {
"terms" : {
"age" : [20,21]
}
}
}
16.range 查询
range 过滤允许我们按照指定范围查找一批数据:
范围操作符包含:
- gt: 大于
- gte: 大于等于
- lt: 小于
- lte: 小于等于
示例:
POST xxx/_search
{
"query": {
"range": {
"age": {
"gte": 20,
"lte": 22
}
}
}
}
17.exists 查询
exists 查询可以用于查找文档中是否包含指定字段或没有某个字段,类似于 SQL 语句中的 IS_NULL 条件
POST xxx/_search
{
"query": {
"exists": {
"field": "mail"
}
}
}
欢迎关注。