文档基本操作
# 一、新增文档
请求格式如下:
POST shopping/_doc/
{
"title":"小米手机",
"category":"小米",
"images":"photo.jpg",
"price":3999.00
}
服务端返回结果:
{
"_index": "shopping", // 索引
"_type": "_doc", // 类型-文档
"_id": "lKTdI4gBGQlN61UNgHvL", // 唯一标识,随机生成,类似MySQL的主键
"_version": 1,// 版本,表示数据修改了多少次
"result": "created",// 结果
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
如果要指定唯一标识
POST shopping/_doc/3
{
"title":"vivo手机plus",
"category":"vivo",
"images":"photo.jpg",
"price": 2600.00
}
# 二、查看文档
# 1、主键查询
如果想要根据主键对单个文档进行查询
# 根据主键查询一个文档
GET shopping/_doc/2
服务端返回格式:
{
"_index" : "shopping", // 索引
"_type" : "_doc", // 类型
"_id" : "2", // 主键
"_version" : 3, // 版本,表示修改了几个
"_seq_no" : 3,
"_primary_term" : 1,
"found" : true,
"_source" : { // 数据
"title" : "华为手机plus",
"category" : "华为",
"images" : "photo.jpg",
"price" : 3000.0
}
}
# 2、全查询
如果想要查询一个索引下的所有文档:
# 查询索引下的所有文档
GET shopping/_search
# 三、修改文档
# 1、全部修改
全部修改和新增操作一样,只需要把请求内容更换一下即可:
POST shopping/_doc/2
{
"title" : "华为手机plus",
"category" : "华为plus",
"images" : "photo.jpg",
"price" : 3000.0
}
服务端返回:
{
"_index" : "shopping",
"_type" : "_doc",
"_id" : "2",
"_version" : 4,
"result" : "updated",// 表示被修改
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 7,
"_primary_term" : 1
}
# 2、部分修改
请求体格式:
POST shopping/_update/2
{
"doc": {
"price" : 6666
}
}
服务端返回:
{
"_index" : "shopping",
"_type" : "_doc",
"_id" : "2",
"_version" : 7,
"result" : "updated",// 表示被修改
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 10,
"_primary_term" : 1
}
# 四、删除文档
请求体格式如下:
# 文档删除
DELETE shopping/_doc/100
服务端返回:
{
"_index" : "shopping",
"_type" : "_doc",
"_id" : "100",
"_version" : 2,
"result" : "deleted", //表示被删除了
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 6,
"_primary_term" : 1
}
文档的删除只是逻辑删除。
# 五、复杂查询
# 1、复杂查询格式
基本格式
GET /{索引名}/_search
{
"from" : 0, // 返回搜索结果的开始位置
"size" : 10, // 分页大小,一次返回多少数据
"_source" :[ ...需要返回的字段数组... ],
"query" : { ...query子句... },
"aggs" : { ..aggs子句.. },
"sort" : { ..sort子句.. }
}
query子句主要用来编写类似SQL的Where语句,支持布尔查询(and/or)、IN、全文搜索、模糊匹配、范围查询(大于小于)。
aggs子句,主要用来编写统计分析语句,类似SQL的group by语句
sort子句,用来设置排序条件,类似SQL的order by语
查询返回格式
{
"took" : 5, // 查询消耗时间,单位毫秒
"timed_out" : false, // 查询是否超时
"_shards" : { // 本次查询参与的ES分片信息,查询中参与分片的总数,以及这些分片成功了多少个失败了多少个
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : { // hits字段包含我们搜索匹配的结果
"total" : { // 匹配到的文档总数
"value" : 1, // 找到1个文档
"relation" : "eq"
},
"max_score" : 1.0, // 匹配到的最大分值
"hits" : [
// 这里就是我们具体的搜索结果,是一个JSON文档数组
]
}
}
# 2、模糊匹配
# 模糊匹配
GET shopping/_search
{
"query": {
"match": {
"title": "手机"
}
}
}
# 3、精确匹配
GET shopping/_search
{
"query": {
"term": {
"category": {
"value": "小米"
}
}
}
}
# 4、排序
# 排序
GET shopping/_search
{
"sort": [
{
"price": {
"order": "desc"
}
}
]
}
# 5、分页
# 分页
GET shopping/_search
{
"from": 0,
"size": 10
}
# 6、多条件
# 多条件
GET shopping/_search
{
"query":{
"bool":{
"must":[{
"match":{
"category":"小米"
}
},{
"match":{
"price":3999.00
}
}]
}
}
}
# 多条件
GET shopping/_search
{
"query":{
"bool":{
"should":[{
"match":{
"category":"小米"
}
},{
"match":{
"category":"华为"
}
}]
}
}
}
- must:&&
- should: ||
# 7、范围查询
# 范围查询
GET /shopping/_search
{
"query": {
"range": {
"price": {
"gte": 2000,
"lte": 3000
}
}
}
}
gt - 大于 ( > )
gte - 大于且等于 ( >= )
lt - 小于 ( < )
lte - 小于且等于 ( <= )
# 参考
上次更新: 2024/06/29, 15:13:44