下载APP
登录
关闭
讲堂
算法训练营
Python 进阶训练营
企业服务
极客商城
客户端下载
兑换中心
渠道合作
推荐作者
当前播放: 11 | 文档的基本CRUD与批量操作
00:00 / 00:00
标清
  • 标清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看

Elasticsearch核心技术与实战

共100讲 · 约1000分钟
16516
免费
01 | 课程介绍
免费
02 | 内容综述及学习建议
免费
03 | Elasticsearch简介及其发...
免费
04 | Elastic Stack家族成员及...
免费
05 | Elasticsearch的安装与...
06 | Kibana的安装与界面快速...
07 | 在Docker容器中运行Elas...
08 | Logstash安装与导入数据
09 | 基本概念:索引、文档和...
10 | 基本概念:节点、集群、分...
11 | 文档的基本CRUD与批量操...
12 | 倒排索引介绍
13 | 通过Analyzer进行分词
14 | Search API概览
15 | URI Search详解
16 | Request Body与Query ...
17 | Query String&Simple ...
18 | Dynamic Mapping和常见...
19 | 显式Mapping设置与常见参...
20 | 多字段特性及Mapping中配...
21 | Index Template和Dynami...
22 | Elasticsearch聚合分析简...
23 | 第一部分总结
24 | 基于词项和基于全文的搜索
25 | 结构化搜索
26 | 搜索的相关性算分
27 | Query&Filtering与多字...
28 | 单字符串多字段查询:Dis...
29 | 单字符串多字段查询:Mult...
30 | 多语言及中文分词与检索
31 | Space Jam,一次全文搜索...
32 | 使用Search Template和In...
33 | 综合排序:Function Scor...
34 | Term&Phrase Suggester
35 | 自动补全与基于上下文的提...
36 | 配置跨集群搜索
37 | 集群分布式模型及选主与脑...
38 | 分片与集群的故障转移
39 | 文档分布式存储
40 | 分片及其生命周期
41 | 剖析分布式查询及相关性算...
42 | 排序及Doc Values&Field...
43 | 分页与遍历:From, Siz...
44 | 处理并发读写操作
45 | Bucket & Metric聚合分...
46 | Pipeline聚合分析
47 | 作用范围与排序
48 | 聚合分析的原理及精准度问...
49 | 对象及Nested对象
50 | 文档的父子关系
51 | Update By Query &...
52 | Ingest Pipeline & Pa...
53 | Elasticsearch数据建模实...
54 | Elasticsearch数据建模最...
55 | 第二部分总结回顾
56 | 集群身份认证与用户鉴权
57 | 集群内部安全通信
58 | 集群与外部间的安全通信
59 | 常见的集群部署方式
60 | Hot & Warm架构与Shard...
61 | 分片设计及管理
62 | 如何对集群进行容量规划
63 | 在私有云上管理Elasticsea...
64 | 在公有云上管理与部署Elas...
65 | 生产环境常用配置与上线清...
66 | 监控Elasticsearch集群
67 | 诊断集群的潜在问题
68 | 解决集群Yellow与Red的问...
69 | 提升集群写性能
70 | 提升进群读性能
71 | 集群压力测试
72 | 段合并优化及注意事项
73 | 缓存及使用Breaker限制内...
74 | 一些运维的相关建议
75 | 使用Shrink与Rollover AP...
76 | 索引全生命周期管理及工具...
77 | Logstash入门及架构介绍
78 | 利用JDBC插件导入数据到El...
79 | Beats介绍
80 | 使用Index Pattern配置数...
81 | 使用Kibana Discover探索...
82 | 基本可视化组件介绍
83 | 构建Dashboard
84 | 用Monitoring和Alerting监...
85 | 用APM进行程序性能监控
86 | 用机器学习实现时序数据的...
87 | 用机器学习实现时序数据的...
88 | 用ELK进行日志管理
89 | 用Canvas做数据演示
90 | 项目需求分析及架构设计
91 | 将电影数据导入Elasticsea...
92 | 搭建你的电影搜索服务
93 | 需求分析及架构设计
94 | 数据Extract & Enrichm...
95 | 构建Insights Dashboard
96 | Elastic认证介绍
97 | 考点梳理
98 | 集群数据备份
99 | 基于Java和Elasticseach构...
100 | 结束语

精选留言(40)

  • 2019-10-10
    建议用井号注释,这样就不会在左边有报错提示了

    作者回复: 👍

    3
  • 2019-06-27
    不要发送过多数据,一般多少数据才算是过多呢?

    作者回复: 很好的问题。比较笼统的说,一般建议是1000-5000个文档,如果你的文档很大,可以适当减少队列,大小建议是5-15MB,默认不能超过100M。会报错

    1
    3
  • 2019-06-27
    老师,问您个问题,ES从2.x升级到7.1会有问题吗?比如说调用的API和数据结构等其他的兼容问题?
    您有好的建议嘛?
    是不是可以加个答疑,讲解一下?

    作者回复: 在后续的课程中会涵盖full restart 升级个滚动升级相关的问题。

    简单回答一下你的问题
    1. 大版本更新, API会有向后不兼容的情况发生

    2.大版本的升级,数据需要重建索引

    1
    3
  • 2019-06-26
    老师_bulk里面的{ "field1" : "value1" }和{ "doc" : {"field2" : "value2"} }有啥作用?
    我看了好像是定义修改/创建之后是否需要返回及其返回值格式,不知道对不对?

    作者回复: field1,field2,是你的文档的字段名字。

    例如,你写入一个user相关的文档,它可能是这样的

    {"userName":"jack","email":"jack@google.com"}

    Bulk API的返回,你可以自己在kibana中测试,应该是一个一个文档操作的具体返回结果

    4
    3
  • mget 和 msearch 有什么区别? 不都是查询吗?

    作者回复: mget 是通过文档ID列表得到文档信息。

    msearch 是根据查询条件,搜索到相应文档。

    4
    3
  • 2019-06-28
    es版本升级太迅速了,今天发布7.2了

    作者回复: 嗯,7.2增加了SEIM部分的更新。同时继承了appsearch。appsearch我本就计划会讲。SEIM部分我也会考虑加入我们的课程

    2
  • 2019-06-27
    请问老师,我们在写入 doc 内容之前,不需要先定义好 index 的结构吗? 之前 09 课中说的 mapping 不是要定义文档字段的类型吗?

    作者回复: dynamic mapping的概念会在后续章节中讲解。你可以不做mapping,es会自动根据文档类型进行类型推断。并采用一些默认的配置。在生产环境中,建议做mapping设定,再写入数据

    1
    2
  • 我觉得对于ES的POST、PUT请求可以这么按照http请求的“幂等性”来理解。
    https://blog.csdn.net/u010651249/article/details/84350061。
    PUT方法要求是幂等的,POST方式不是幂等的,POST方法修改资源状态时,URL指示的是该资源的父级资源,待修改资源的信息在请求体中携带。而PUT方法修改资源状态时,URL直接指示待修改资源。
    所以,对于ES的PUT请求,URL上需要明确到document ID,即可以新增又可以更新整个文档(ES的更新都是get-有就delete-再创建),但无论如何都是这一个document。由于PUT请求既可以新增又可以更新的特性,为了提供put-if-absent特性,即没有时才新增,增加了op_type=create的选项(op_type只有create、index)。
    而POST请求URL是不需要指定ID的,每次都会创建一个新的文档,就不是幂等的。
    (其实PUT请求执行的操作,把PUT换成POST也是可以的,但这个官方没有说,是实验出来的)

    上面是根据Http请求来区分,如果根据ES API来区分:
    index: 针对整个文档,既可以新增又可以更新;
    create:只是新增操作,已有报错,可以用PUT指定ID,或POST不指定ID;
    update:指的是部分更新,官方只是说用POST,请求body里用script或 doc里包含文档要更新的部分;
    delete和read:就是delete和get请求了,比较简单。
    展开

    作者回复: 👍

    1
    1
  • 3分50多秒的指定id来create应该是put吧,老师,虽然是个小问题,但听的时候还是疑惑了一下。感谢老师的讲解,很nice
    1
  • 2019-07-03
    ID是使用默认的(es帮忙生成)还是使用自己批量滚动创建合适,听说自己创建ID的话需要考虑分片和存储平衡的问题

    作者回复: 自己创建id,需要考虑id的均衡性,避免产生分配不均衡的问题

    1
  • 2019-06-27
    老师好,请问一下 ES 如何支持多租户的?是否可以做查询逻辑的隔离或者物理数据的隔离?

    作者回复: 通过 X-Pack 的security 插件,提供索引级,字段级别的 Role based的数据访问控制

    1
    1
  • 2019-06-27
    index是干啥的,不是crud吗?

    作者回复: Index = 删除再创建

    Create = 创建新文档,如果已经存在,会报错

    Update = 会对文档做增量的更新

    1
  • c
    2019-06-26
    api这么多 怎么记得住啊

    作者回复: 基本的CRUD 记住。其他的 API 无非就是 查询和聚合。

    自己可以做一些归类,这样会帮助自己强化记忆。另外,不用死记 API,Kibana 的 Console 中有代码的提示与自动完成功能

    1
  • 2019-11-07
    老师,有个疑惑。

    为什么其他操作关于制定index 都是使用`_index`,但是msearch操作的时候却是`index`?这有色很美规律吗?

    作者回复: 这些也不需要特别记住,使用通过代码提示

  • 2019-10-04
    老师,我才开始学习es,现在我们系统订单数都已经超过千万,现在系统提供了按收货人电话,姓名,收货地址模糊查询的功能,数据库直接查询很慢,想用es是否可行,还有用户数据 和推送给用户的消息数据

    作者回复: 应该是适合的

  • 另外,对于update api,到底会不会删除原来的文档呢??ES都是先删除再创建是因为ES的新增操作是有索引过程的,不是简单的存储??是否可以针对文档的某个filed重新索引??

    课程里说不会,但ES基于2.x的中文文档关于“更新整个文档”一章最后说:
    在本章的后面部分,我们会介绍 update API, 这个 API 可以用于 partial updates to a document 。 虽然它似乎对文档直接进行了修改,但实际上 Elasticsearch 按前述完全相同方式执行以下过程:
    从旧文档构建 JSON
    更改该 JSON
    删除旧文档
    索引一个新文档
    唯一的区别在于, update API 仅仅通过一个客户端请求来实现这些步骤,而不需要单独的 get 和 index 请求。
    https://www.elastic.co/guide/cn/elasticsearch/guide/current/update-doc.html

    7.1英文文档关于update API的描述,倒是体现了是根据原文档修改后merge回去的:
    The update API allows to update a document based on a script provided. The operation gets the document (collocated with the shard) from the index, runs the script (with optional script language and parameters), and indexes back the result (also allows to delete, or ignore the operation). It uses versioning to make sure no updates have happened during the "get" and "reindex".
    https://www.elastic.co/guide/cn/elasticsearch/guide/current/update-doc.html
    展开
  • 2019-09-18
    老师,能否讲一下CRUD的实现原理?假如现在从零开始,有一个索引没有任何文档。创建时,怎么定位节点或分片?怎么创建倒排索引?怎么存储数据?性能优化怎么做的?修改、删除都需要先查出来,怎么查询的?我很好奇?
  • 2019-08-03
    老师,您好,现在post和put有点迷糊。下边 post 和put 都可以用来创建,update 只能通过POST 方式
    POST users/_doc/100
    {
        "user" : "Mike",
        "post_date" : "2019-04-15T14:12:12",
        "message" : "trying out Kibana"
    }

    PUT users/_doc/101
    {
        "user" : "Mike",
        "post_date" : "2019-04-15T14:12:12",
        "message" : "trying out Kibana"
    }
    展开
    1
  • 2019-07-19
    请问老师,节点中是通过分片来保证数据的高可用性吗,那如果节点挂掉的话 是怎么保证数据高可用性的,其他节点会保存数据的副本吗?是不是意味着,每个data节点保存的索引都是一致的?

    作者回复: 分片的副本数可以设定。具体听后续章节的讲解

  • 2019-07-16
    老师,如果需要 bulk create indices, 最好的 practices是什么?大概300个左右。 谢谢。

    作者回复: 文档上是说,没有gold rule。所以,严格来说,你需要做严格的性能测试。从单个分片上,将bulk size从100开始尝试,逐步增加,看最佳的结果。

    一般一次30mb 数据应该是没有太大的问题的