• DDs moving castle
    2019-10-01
    我觉得对于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
     4
  • David
    2019-06-27
    不要发送过多数据,一般多少数据才算是过多呢?

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

     1
     4
  • 吾皇万岁万岁万万岁
    2019-06-26
    mget 和 msearch 有什么区别? 不都是查询吗?

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

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

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

    作者回复: 👍

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
     1
  • liwenqiu
    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
  • 水蒸蛋
    2020-01-19
    老师 使用
    POST /products/_bulk
    {"index":{"_id":1}}
    {"productID":"XHDK-A-1293-#fJ3","desc":"IPhone"}

    返回提示
    type": "action_request_validation_exception",
            "reason": "Validation Failed: 1: type is missing;"

    看你操作是正常的,我的版本是6.5.4
    展开
    
    
  • cording
    2020-01-17
    老师,您好!我们项目要求实时写入和查询,我只能将刷新机制设置为强制刷新,有什么办法能优化强制刷新机制,提高性能吗?
    
    
  • 狐狸糊涂
    2020-01-09
    老师,您在03:45左右,演示的是PUT的指定Id方式,口述上说的是POST的方式吗?
    
    
  • 忘川千叶子
    2019-12-17
    老师您好,在操作bulk批量写入数据的时候,我不想每次都给个id具体的数值,能不能像mysql自增id那样设置呢?搜了好多资料说如下设置,"action.allow_id_generation": "true",但是失败了,老师能否给个bulk批量写入数据、设置ID自动创建的例子呢?

    作者回复: 使用index 就不需要制定 id

    curl -XPOST "http://localhost:9200/_bulk" -d'
        { "index" : { "_index" : "test", "_type" : "_doc" } }
        { "title" : "Quick brown rabbits", "content" : "Brown rabbits are commonly seen" }
        { "index" : { "_index" : "test", "_type" : "_doc" } }
        { "title" : "Keeping pets healthy", "content" : "My quick brown fox eats rabbits

    
    
  • hgf
    2019-11-07
    老师,有个疑惑。

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

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

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

    作者回复: 应该是适合的

    
    
  • DDs moving castle
    2019-10-01
    另外,对于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
    展开
    
    
我们在线,来聊聊吧