zoukankan      html  css  js  c++  java
  • Elasticsearch系统学习(九)-批量操作

    一、批量查询

    1.1、批量查询的好处

    单次查询:查询100条数据,那么就要发送100次网络请求,网络开销大

    批量查询:查询100条数据,就只要发送1次网络请求,网络请求的性能开销缩减100倍

    1.2、mget使用

    1)一条一条的查询

    GET /test_index/test_type/1
    GET /test_index/test_type/2

    2)mget批量查询

    GET /_mget
    {
      "docs": [
          {
            "_index": "test_index",
            "_type": "test_type",
            "_id": 8
          },
                {
            "_index": "test_index",
            "_type": "test_type",
            "_id": 10
          }
        ]
    }
    
    {
      "docs": [
        {
          "_index": "test_index",
          "_type": "test_type",
          "_id": "8",
          "_version": 3,
          "found": true,
          "_source": {
            "test_field": "test client 2"
          }
        },
        {
          "_index": "test_index",
          "_type": "test_type",
          "_id": "10",
          "_version": 2,
          "found": true,
          "_source": {
            "test_field1": "test1",
            "test_field2": "updated test2"
          }
        }
      ]
    }

    3)如果查询的document是一个index下的不同type

    GET /test_index/_mget
    {
      "docs": [
          {
            "_type": "test_type",
            "_id": 8
          },
          {
            "_type": "test_type",
            "_id": 10
          }
        ]
    }
    

    4)如果查询的数据都在同一个index下的同一个type下

    GET /test_index/test_type/_mget
    {
       "ids": [1, 2]
    }

    二、bulk批量增删改

    2.1、bulk语法

    每一个操作要两个json串,语法如下:

    {"action": {"metadata"}}
    {"data"}

    比如创建一个文档:

    {"index": {"_index": "test_index", "_type", "test_type", "_id": "1"}}
    {"test_field1": "test1", "test_field2": "test2"}

    2.2、bulk支持的操作类型

    (1)delete:删除一个文档,只要1个json串就可以了
    (2)create:PUT /index/type/id/_create,强制创建
    (3)index:普通的put操作,可以是创建文档,也可以是全量替换文档
    (4)update:执行的partial update操作

    注意:

    1)bulk api对json的语法,有严格的要求,每个json串不能换行,只能放一行,同时一个json串和一个json串之间,必须有一个换行

    2)bulk操作中,任意一个操作失败,是不会影响其他的操作的,但是在返回结果里,会告诉你异常日志

    2.3、bulk操作

    POST /_bulk
    { "delete": { "_index": "test_index", "_type": "test_type", "_id": "3" }} 
    { "create": { "_index": "test_index", "_type": "test_type", "_id": "12" }}  #当document存在时会报错
    { "test_field":    "test12" }
    { "index":  { "_index": "test_index", "_type": "test_type", "_id": "2" }}
    { "test_field":    "replaced test2" }
    { "update": { "_index": "test_index", "_type": "test_type", "_id": "1", "_retry_on_conflict" : 3} }
    { "doc" : {"test_field2" : "bulk test1"} }
    
    
    POST /test_index/_bulk
    { "delete": { "_type": "test_type", "_id": "3" }} 
    { "create": { "_type": "test_type", "_id": "12" }}
    { "test_field":    "test12" }
    { "index":  { "_type": "test_type" }}
    { "test_field":    "auto-generate id test" }
    { "index":  { "_type": "test_type", "_id": "2" }}
    { "test_field":    "replaced test2" }
    { "update": { "_type": "test_type", "_id": "1", "_retry_on_conflict" : 3} }
    { "doc" : {"test_field2" : "bulk test1"} }
    
    
    POST /test_index/test_type/_bulk
    { "delete": { "_id": "3" }} 
    { "create": { "_id": "12" }}
    { "test_field":    "test12" }
    { "index":  { }}
    { "test_field":    "auto-generate id test" }
    { "index":  { "_id": "2" }}
    { "test_field":    "replaced test2" }
    { "update": { "_id": "1", "_retry_on_conflict" : 3} }
    { "doc" : {"test_field2" : "bulk test1"} }

    2.4、bulk size最佳大小

    bulk request会加载到内存里,如果太大的话,性能反而会下降,因此需要反复尝试一个最佳的bulk size。一般从1000~5000条数据开始,尝试逐渐增加。另外,如果看大小的话,最好是在5~15MB之间。

  • 相关阅读:
    python set()、len()、type()、保留小数、EOFError
    代码学习与感悟
    你的代码的风格
    python 面向对象的类
    ubuntu 上下左右键变成ABCD
    python运算符
    python 数据类型详解
    python关键字
    python 设计及调试的一些小技巧
    python-list
  • 原文地址:https://www.cnblogs.com/hujinzhong/p/11451031.html
Copyright © 2011-2022 走看看