elasticsearch6实战教程学习笔记(二) -- 增加


笔记来源 → B站学习视频:最新ElasticSearch6实战教程。 

序号是视频序号,内容根据我的理解微调了。

上篇:elasticsearch6实战教程学习笔记(一)

上篇介绍了es的一点基础,以及简单创建index、type和添加数据的方法。

本篇内容:(1)修改数据(基于脚本);(2)object类型;(3)使用post、put对文档修改的区别;(4)解析上篇中的metadata元数据;(5)_source元数据解析。 

目录

30. 基于groovy脚本执行部分更新

15. Object数据类型及手动创建。

29. 文档修改原理

26.27. metadata元数据解析

28. _source元数据解析


30. 基于groovy脚本执行部分更新

以下是按照视频的顺序介绍的。

① 修改参数单值:这里我修改了id 为1的doc中的age,结果为age值加一。

GET /mauanx/user/1/_update
{
    "script":"ctx._source.age+=1"
}

② 数组中增删改数据

1)增:在interests数组中增加"football"。

GET /mauanx/user/1/_update
{
    "script":{
        "source":"ctx._source.interests.add(params.tag)",
        "params":{
            "tag":"football"
        }
    }
}

2)删:删除interests数组中的"football"。

GET /mauanx/user/1/_update
{
    "script":{
        "source":"ctx._source.interests.remove(ctx._source.interests.indexOf(params.tag))",
        "params":{
            "tag":"football"
        }
    }
}

③ 删除文档

GET /mauanx/user/1/_update
{
    "script":{
        // 三元运算符,满足则删除,否则无操作
        "source":"ctx.op=_source.age==params.count?'delete':'none'",
        "params":{
            "count":22
        }
    }
}

④ 修改/创建一个doc

GET /mauanx/user/1/_update
{
    "script":"script":"ctx._source.age+=1"
    // "upsert":当文档存在时,执行"script"中的操作;若不存在,则使用"upsert"中的数据初始化doc。
    "upsert":{
        "name":"Abbey",
        "age":20,
        "sex":"female",
        "interests":["music"]
    }
}

15. Object数据类型及手动创建。

除了基础类型外,es还可以创建object。 

(1)自动创建

doc字段为:name(text),infos(object,object中只有一个age)。我们存储了两个doc。

① 存储格式:

{
    "name":"Abbey",
    "infos":{
        "age":20
    }
}
{
    "name":"Barbara",
    "infos":{
        "age":22
    }
}

② 底层存储格式

{
    "name":["Abbey","Barbie"],
    "infos.age":[20,22]
}

2)手动创建:

PUT /index
{
    "settings":{
        "属性":属性值
    },
    "mappings":{
    "属性":{
        "properties":{
        "属性":属性值      
            }
        }
    }
}

29. 文档修改原理

(1)使用put修改文档(全部替换):es查询出数据展示给用户,用户修改后提交数据,旧文档被标记为deleted document,创建新文档new doc。旧文档在后续会被es删除。

(2)使用post修改文档(部分替换):用户直接提交需要修改的数据,es修改数据,旧文档被标记为deleted document,创建新文档new doc。旧文档在后续会被es删除。

总结:

① post比put需要的网络传输次数要少,从而提高了性能。post的查询文档到修改都是在es内部实现的。

② 并发时,post比put发生冲突的可能性更小。


26.27. metadata元数据解析

(1)_index:

① 指明文档存放在哪个索引中。

② 同一个索引下应当存放相似的文档(文档的field多数相同)。举例:若同一index中存放了前台系统、后台系统需要的数据类型,则当前台、后台同时搜索时,会影响搜索的性能。

③ 索引名:必须小写;不能以下划线开头;不能有逗号。

(2) _type:

① 指明文档属于索引中哪个类型。

② 一个索引下只能有一个type。

③ 类型名:可以大小写;不能以下划线开头;不能有逗号。

(3)_id:

① 指定文档的唯一标识。

② id的生成:

        1)使用 PUT /index/type/id 自己指定,通常在数据导入es时使用。

        2)使用 POST /index/type 自动生成。es使用了GUID算法,并发添加时id不会重复。


28. _source元数据解析

使用GET /index/type/id 查询时,"_source"下是查询出的字段,以及存储的数值。默认返回所有字段的数值。

也可以选择返回的参数:

// ① 选取参数"age"
GET /mauanx/user/1?_source=age
// ② 选取参数"age"和"name"
GET /mauanx/user/_search
{
    "_source": {
        "includes":["age","name"]
    }
}

下篇:elasticsearch6实战教程学习笔记(三)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值