bulk api可以在单个请求中一次执行多个文档的 create 、 index 、 update 或 delete 操作

批量操作的行为(action)必须是以下几种:
行为 解释
create 当文档不存在时创建之。
index 创建新文档或替换已有文档。
update 局部更新文档。
delete 删除一个文档。

create 必须制定_id

index  不必指定_id  会自动创建一个_id

例如,一个 delete 请求看起来是这样的:

{ "delete": { "_index": "website", "_type": "blog", "_id": "" }}
request body 行由文档的 _source 本身组成--文档包含的字段和值。它是 index 和 create 操作所必需的,这是有道理的:你必须提供文档以索引。 它也是 update 操作所必需的,并且应该包含你传递给 update API 的相同请求体: doc 、 upsert 、 script 等等。 删除操作不需要 request body 行。 { "create": { "_index": "website", "_type": "blog", "_id": "" }}
{ "title": "My first blog post" }
Index 如果不指定 _id ,将会自动生成一个 ID : { "index": { "_index": "website", "_type": "blog" }}
{ "title": "My second blog post" }
为了把所有的操作组合在一起,一个完整的 bulk 请求 有以下形式: POST /_bulk
{ "delete": { "_index": "website", "_type": "blog", "_id": "" }}
{ "create": { "_index": "website", "_type": "blog", "_id": "" }}
{ "title": "My first blog post" }
{ "index": { "_index": "website", "_type": "blog" }}
{ "title": "My second blog post" }
{ "update": { "_index": "website", "_type": "blog", "_id": "", "_retry_on_conflict" : } }
{ "doc" : {"title" : "My updated blog post"} } bulk 参考示例:

$params['body'] = [];

//创建或替换文档操作
$params['body'][] = [
  'index' => [ #创建或替换
    '_index' => 'my_index',
    '_type' => 'my_type',
    '_id' => 1,
    '_routing' => 1,
  ]
];
$params['body'][] = [
  'name' => '杨',
  'age' => 23
];

//创建文档操作
$params['body'][] = [
  'create' => [ #创建
    '_index' => 'my_index',
    '_type' => 'my_type',
    '_id' => 2,
    '_routing' => 2,
  ]
];
$params['body'][] = [
  'name' => '郭',
  'age' => 19
];

//局部更新文档操作
$params['body'][] = [
  'update' => [ #局部更新
    '_index' => 'my_index',
    '_type' => 'my_type',
    '_id' => 3,
    '_routing' => 3,
  ]
];
$params['body'][] = [
  'doc' => [
    'age' => 19
  ]
];

//删除文档操作
$params['body'][] = [
  'delete' => [ #删除
    '_index' => 'my_index',
    '_type' => 'my_type',
    '_id' => 4,
    '_routing' => 4,
  ]
];
$client = Elasticsearch\ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();
$res = $client->bulk($params);

初识Elasticsearch,bulk 操作的遇到的那些事的更多相关文章

  1. ELK 学习笔记之 elasticsearch Bulk操作

    Bulk操作: Bulk操作用于批量插入数据: 请求体格式: 编辑一个文件:(插入2个新的文档) curl -XPOST 'http://192.168.1.151:9200/library/book ...

  2. Elasticsearch —— bulk批量导入数据

    在使用Elasticsearch的时候,一定会遇到这种场景--希望批量的导入数据,而不是一条一条的手动导入.那么此时,就一定会需要bulk命令! 更多内容参考我整理的Elk教程 bulk批量导入 批量 ...

  3. elasticsearch bulk

    情景介绍 公司2000W的数据从mysql 迁移至elasticsearch,以提供微服务.本文基于elasticsearch-py bulk操作实现数据迁移.相比于elasticsearch-dum ...

  4. BULK操作减少redo实验

    建表: create table sm_histable ( sm_id ), sm_subid ), service_type ), orgton ), orgnpi ), destton ), d ...

  5. ElasticSearch Index操作源码分析

    ElasticSearch Index操作源码分析 本文记录ElasticSearch创建索引执行源码流程.从执行流程角度看一下创建索引会涉及到哪些服务(比如AllocationService.Mas ...

  6. 使用Spring Data ElasticSearch+Jsoup操作集群数据存储

    使用Spring Data ElasticSearch+Jsoup操作集群数据存储 1.使用Jsoup爬取京东商城的商品数据 1)获取商品名称.价格以及商品地址,并封装为一个Product对象,代码截 ...

  7. Elasticsearch批处理操作——bulk API

    Elasticsearch提供的批量处理功能,是通过使用_bulk API实现的.这个功能之所以重要,在于它提供了非常高效的机制来尽可能快的完成多个操作,与此同时使用尽可能少的网络往返. 1.批量索引 ...

  8. elasticsearch使用操作部分

    本片文章记录了elasticsearch概念.特点.集群.插件.API使用方法. 1.elasticsearch的概念及特点.概念:elasticsearch是一个基于lucene的搜索服务器.luc ...

  9. elasticsearch更新操作问题

    elasticsearch在更新的时候,是通过id进行管理的,我们在前台传入id操作,id如果与elasticsearch相同,则覆盖,否则新增一条记录.且elasticsearch中的插入一条记录和 ...

随机推荐

  1. tpc资料汇总

    官方资料 TPC官网  http://www.tpc.org/ 配置文档 大家一起来测试,benchmark起来(MySQL下的TPC-C,TPC-H,TPC-W)  http://www.itpub ...

  2. 自定义UITableViewCell上的delete按钮

    http://blog.csdn.net/xiaoxuan415315/article/details/7834940

  3. svn tree confflect

    同事提交了一些文件,我尝试更新那个目录, 却总是无法更新到他的提交, 一直都是工作空间的内容.而且资源管理器的目录图标显示, 出现变动(就是右上角有个红色的那种). 难道同事没有提交成功吗? 检查sv ...

  4. 【ASP.NET 插件】Plupload多格式多文件上传实现

    由于工作需求,要实现一个多格式多文件的上传功能,而且需要.NET版本的,嘿嘿,终于还是实现了,网上搜了很久,找到一篇不错的博文:WEB版一次选择多个文件进行批量上传(Plupload)的解决方案,在此 ...

  5. 机器学习入门-文本数据-构造Ngram词袋模型 1.CountVectorizer(ngram_range) 构建Ngram词袋模型

    函数说明: 1 CountVectorizer(ngram_range=(2, 2)) 进行字符串的前后组合,构造出新的词袋标签 参数说明:ngram_range=(2, 2) 表示选用2个词进行前后 ...

  6. day24-抽象类与接口类

    接口类 1.继承有两种用途:一:继承基类的方法,并且做出自己的改变或者扩展(代码重用) 二:声明某个子类兼容于某基类,定义一个接口类,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继 ...

  7. jsfl 导出指定名称的swf

    var _openDOC = fl.openDocument("file:///E|TE/dt.fla"); var _exName = _openDOC.pathURI.spli ...

  8. jquery元素使用

    特殊用法: var formFields = $([]).add(_ele1).add(_ele2);  可将多个元素整合到一个集合中 1.has方法 has()方法查找自己,has为子集条件,即包含 ...

  9. Linux:使用读写锁使线程同步

    基础与控制原语 读写锁 与互斥量类似,但读写锁允许更高的并行性.其特性为:写独占,读共享. 读写锁状态: 一把读写锁具备三种状态:     1. 读模式下加锁状态 (读锁)     2. 写模式下加锁 ...

  10. java.lang.ClassNotFoundException: org.hibernate.engine.SessionFactoryImplementor

    Hibernate4.x与spring3.x整合,有关事务的处理,用Junit4测试,出现org.springframework.beans.factory.BeanCreationException ...