elasticsearch 6.x (五) 单一文档 API 介绍和使用 update和delete API

大家好,我是烤鸭:

    今天分享的是官网6.x    单一文档(Single document APIs)APIs。

    本文这是部分翻译,如果想看全部的,还是建议阅读官方api。链接:

     https://www.elastic.co/guide/en/elasticsearch/reference/current/docs.html

1.    删除   (delete) API

删除API允许根据特定的索引从特定的索引中删除类型化的JSON文档。下面的示例从称为twitter的索引,类型是_doc,id是1来删除JSON文档。
    
DELETE /twitter/_doc/1
结果:
{"_shards" : {"total" : 2,"failed" : 0,"successful" : 2},"_index" : "twitter","_type" : "_doc","_id" : "1","_version" : 2,"_primary_term": 1,"_seq_no": 5,"result": "deleted"
}

版本控制

索引的每个文档都是版本控制的。删除文档时,可以指定version ,以确保我们试图删除的相关文档实际上已经被删除了,并且同时没有被更改。在文档上执行的每一个写入操作(包括删除操作)都会导致其版本增加。删除文档的版本号在删除后的短时间内仍然可用,以允许对并发操作的控制。删除文档的版本可用的时间由index.gc_deletes参数决定和默认为60秒

路由

当使用索引控制路由时,删除文档还应提供路由值。例如:
DELETE /twitter/_doc/1?routing=kimchy
以上将删除带有索引为tweet ,id为1的文档,但将基于用户路由。注意,没有正确路由的删除将不会删除成功。
_routing 映射设置为required ,并且没有指定路由值时,删除API将引发一个路由RoutingMissingException 并拒绝该请求。

自动索引创建

如果使用 external versioning variant,如果索引尚未创建,则删除操作将自动创建一个索引(请检查create indexAPI以手动创建索引),并且如果尚未创建特定类型之前(检查put mappingAPI以手动创建类型映射),则自动创建动态类型映射。

分布式

删除操作被hash成特定的碎片id。然后,它被重定向到id组内的主碎片中,并在id组内复制(如果需要的话)到碎片副本。

等待active碎片

在执行删除请求时,可以在开始处理删除请求之前设置wait_for_active_shards 参数,以要求最小数量的碎片副本是active的。请参阅这里的详细信息和使用示例。

超时

当主碎片被要求执行删除操作,当操作被执行后,主碎片可能不可用。一些原因可能是,主要碎片目前正在从内存恢复或进行重新定位。默认情况下,删除操作在主碎片在故障和响应错误之前,将等待1分钟timeout 参数可用于显式指定它等待多长时间。下面是将其设置为5分钟的示例:
DELETE /twitter/_doc/1?timeout=5m

2.    更新   (update) API

更新API允许根据提供的脚本更新文档。从索引获取(与碎片搭配的)文档,运行脚本(带有可选的脚本语言和参数),并返回结果(也允许删除或忽略操作)。它使用版本控制来确保在“获取”和“重新索引”期间没有发生任何更新。
注意,此操作仍然意味着文档的完全重新索引,它只删除一些网络往返行程,降低了获取操作和索引操作之间的版本冲突的可能性。必须启用_source字段来启用此功能。

简单例子:

PUT test/_doc/1
{"counter" : 1,"tags" : ["red"]
}

脚本更新

运行脚本,自增计数。

POST test/_doc/1/_update
{"script" : {"source": "ctx._source.counter += params.count","lang": "painless","params" : {"count" : 4}}
}
我们可以在标签列表中添加一个标签(注意,如果标签存在,它将仍然添加它,因为它是一个列表):
POST test/_doc/1/_update
{"script" : {"source": "ctx._source.tags.add(params.tag)","lang": "painless","params" : {"tag" : "blue"}}
}

除了_source之外,以下变量可通过ctx  图获得,如:_index_type_id_version_routing _now (当前时间戳)。

也可以在文档中添加新变量:

POST test/_doc/1/_update
{"script" : "ctx._source.new_field = 'value_of_new_field'"
}

或者删除变量:

POST test/_doc/1/_update
{"script" : "ctx._source.remove('new_field')"
}

而且,我们甚至可以改变执行的操作。如果tags字段包含green,删除文档,否则它不做任何操作(noop):

POST test/_doc/1/_update
{"script" : {"source": "if (ctx._source.tags.contains(params.tag)) { ctx.op = 'delete' } else { ctx.op = 'none' }","lang": "painless","params" : {"tag" : "green"}}
}

更新部分文档

更新API还支持传递部分文档,该文档将被合并到现有文档中(简单递归合并、对象内部合并、替换核心“键值对”和数组)。要完全替换现有文档,应该使用index API。下面的部分更新是对现有文档添加了新字段:

POST test/_doc/1/_update
{"doc" : {"name" : "new_name"}
}

如果指定了doc script ,则忽略doc 。最好是将你的字段对的部分文档放在脚本本身中。

NOOP更新检查

如果doc 被指定,它的值将与现有的_source合并。默认情况下,更新检测会检测到它们不会改变任何东西,并返回“"result" "noop" ,像这样:

POST test/_doc/1/_update
{"doc" : {"name" : "new_name"}
}

如果在发送请求之前name 如果是new_name ,则忽略整个更新请求。如果请求被忽略,响应中的result 返回noop 

{"_shards": {"total": 0,"successful": 0,"failed": 0},"_index": "test","_type": "_doc","_id": "1","_version": 6,"result": "noop"
}

可以禁用上面的更新检查:

POST test/_doc/1/_update
{"doc" : {"name" : "new_name"},"detect_noop": false
}

更新插入

如果文档不存在,则upsert 元素的内容将作为新文档插入。如果文档确实存在,那么script 将被执行:
POST test/_doc/1/_update
{"script" : {"source": "ctx._source.counter += params.count","lang": "painless","params" : {"count" : 4}},"upsert" : {"counter" : 1}
}

更新插入脚本

如果不管文档是否存在,脚本都运行的话,即脚本代替upsert 初始化文档,将scripted_upsert设置为true

POST sessions/session/dh3sgudg8gsrgl/_update
{"scripted_upsert":true,"script" : {"id": "my_web_session_summariser","params" : {"pageViewEvent" : {"url":"foo.com/bar","response":404,"time":"2014-01-01 12:32"}}},"upsert" : {}
}

文档插入更新

发送部分doc 加上upsert doc ,将doc_as_upsert 设置为true 将使用doc 的内容作为upsert 值:
POST test/_doc/1/_update
{"doc" : {"name" : "new_name"},"doc_as_upsert" : true
}

参数

更新操作支持下列query-string 参数:

retry_on_conflict 

在更新的获取和索引阶段之间,可能另一个进程可能已经更新了同一文档。默认情况下,更新操作将因版本冲突异常而失败。retry_on_conflict 参数控制在最终抛出异常之前重试更新的次数。

routing

路由用于将指引更新请求路由到正确的碎片,如果更新的文档不存在,则为更新插入请求设置路由。不能用于更新已存在文档的路由。

timeout

碎片的超时等待变成可用。

wait_for_active_shards

在进行更新操作之前需要active的碎片副本的数量。详情请见这里。

refresh

控制此请求所做的更改为可见的并且能够搜索到。详情见这里。

_source

控制被更新的source是否可以以及如何在响应中返回。默认情况下,更新的source不返回。有关详细信息,请参见source filtering 

version

Update API在内部使用依靠es的版本控制支持,以确保文档在更新过程中不会改变。可以使用version 参数指定文档仅在其版本与指定的版本匹配时才被更新。

更新API不支持除内部版本之外的版本控制。

更新API不支持外部(版本类型external external_gte)或强制(版本类型force)版本,因为这会导致es版本号与外部系统不同步。外部请使用使用index API 。


更多关于elasticsearch 6.x内容:

   1.   elasticsearch 6.x 部署 windows入门(一) spingboot连接

    2.   elasticsearch 6.x linux部署(二) kibana x-pack 安装

    3.   elasticsearch 6.x (三) linux 集群多节点部署

    4.   elasticsearch 6.x (四) 单一文档 API 介绍和使用 index和get API

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412930.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 编译安装BIND

下载网址:www.isc.org 首选需要安装开发环境,包括openssl等开发包; 解压文件 tar -zxvf bind*.tar.gz 创建named使用的系统用户 groupadd -g 53 -r named useradd -u 53 -r named 编译安装 …

Mysql设置忽略大小写

如果你不在意数据的话直接删除数据(删数据库前请备份) 1 停止MySQL 2 删除 MySQL的数据 /var/lib/mysql 3 修改该 lower_case_table_names 1 4 启动 mysql 4 搞定 解决Navicat连接MySQL出现1251-Client does not support authentication protocol requ…

[css] 你是怎么选择resetting和normalizing的?为什么?

[css] 你是怎么选择resetting和normalizing的?为什么? 一般选择normalizeReset: 比较粗暴的处理方式,不管有用没有统统处理成一种方式,如果是临时页面会采用。* {margin: 0;padding: 0;box-sizing: border-box; } *::after, *::be…

http://www.a.cn/?a.b=1 取a.b的值

$_GET[a_b] 转载于:https://www.cnblogs.com/liiu/p/9909286.html

解决svn:E200030: sqlite[S11]:database disk image is malformed

一,问题产生原因:我的电脑突然蓝屏,然后重启电脑后,更新项目提示这个鬼东西 二,解决方法: 1,下载sqlite3并把sqlite3.exe放到项目文件夹.svn同级目录 2,在项目文件夹的上面路径那里…

Java 正则表达式 工具类 中文 英文 email 手机号 身份证 数字 日期

大家好,我是烤鸭: 分享一个Java版本的正则校验工具类。 Validation.java package com.xxx.xxx.common.utils;import java.util.regex.Matcher; import java.util.regex.Pattern; /*** 验证工具类* author admin**/ public class Validation { //--…

[css] position跟margin collapse这些特性相互叠加后会怎么样?

[css] position跟margin collapse这些特性相互叠加后会怎么样? 怎样防止外边距重叠?底部元素脱离文档流(float: left/right || position: absolute/fixed)个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一…

Python_全局变量的定义

1.在my套件下新建一个关键字systemkey并进行脚本的编写:创建一个${var1}变量,并赋值为aaaaaaaaaa Set Global Variable ${var1} aaaaaaaaaa 2.在全局(最顶部文件夹)中Suite Setup→Edit→systemkey&#xff08…

Tomcat设置URL兼容特殊符号

catalina.properties配置&#xff1a; tomcat.util.http.parser.HttpParser.requestTargetAllow|{}[] org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASHtrueserver.xml配置&#xff1a; <Connector port"80" protocol"HTTP/1.1"connectionTi…

[css] 移动端的布局用过媒体查询吗?写一个试试

[css] 移动端的布局用过媒体查询吗&#xff1f;写一个试试 使用过Demo<style>.demo {width: 100px;height: 100px;background: #000000;}media only screen and (min-width: 680px ) {.demo {background: red;}} </style> <div class"demo"></d…

java 实现 常见排序算法(一) 冒泡排序

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下基础排序算法之冒泡排序。 1. 冒泡排序&#xff1a; 原理&#xff1a;比较两个相邻的元素&#xff0c;将较大的元素交换至右端。 思路&#xff1a;依次比较相邻的两个数&#xff0c;将小数放在前面&#xff0c;大…

vue学习之npm

任何一门计算机语言都包含了丰富的第三方库&#xff0c;npm就是JavaScript这门语言的第三方库管理工具&#xff0c;本文详细介绍了JavaScript的包管理工具&#xff0c;npm。 在计算机中安装好Node.js之后&#xff0c;默认已经安装好了npm包管理工具&#xff0c;我们可以输入npm…

idea的maven project消失解决方案

方案一&#xff1a;点击菜单栏View->Tool Windows->Maven projects 方案二&#xff1a;File -> Settings -> Plugins -> Installed ->找到下面两个并勾选->然后重启 1&#xff0c;Maven Integration 2&#xff0c;Maven Integration Extension

[css] 举例说明你知道的css技巧有哪些?

[css] 举例说明你知道的css技巧有哪些&#xff1f; /* 等比例容器 */ .ratio { position: relative; display: block; } .ratio:before { content: ; padding-top: 100%; float: left; } .ratio::after { content: ; display: block; clear: both; }/* 非表单元素也适用的 dis…

Java 深copy 浅copy 引用copy

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下浅copy和深copy。 1. 深copy 什么是深copy&#xff0c;只复制原对象属性值&#xff0c;不管地址。 说一下业务场景&#xff1a; 如果我想创建一个对象&#xff0c;只是对原对象的某个属性值改变。普通的做法就是new 一个…

ubuntu设置root密码及 Xftp连接linux(ubuntu)时提示ssh服务器拒绝了密码,请再试一次...

ubuntu设置root密码及 Xftp连接linux&#xff08;ubuntu&#xff09;时提示ssh服务器拒绝了密码&#xff0c;请再试一次 原文:ubuntu设置root密码及 Xftp连接linux&#xff08;ubuntu&#xff09;时提示ssh服务器拒绝了密码&#xff0c;请再试一次altf2,在弹出的运行窗口中输入…

[css] 判断第一行和第二行的颜色分别是什么?并解释为什么?

[css] 判断第一行和第二行的颜色分别是什么&#xff1f;并解释为什么&#xff1f; <style> .red {color:red;} .green {color:green;} </style><div class"red green">第一行&#xff1a;颜色是什么&#xff1f;</div> <div class"…

linux定时任务清理cache缓存

大家好&#xff0c;我是烤鸭&#xff1a; 如果你出现类似cache过多的情况&#xff0c;请参考这篇。 buff/cache 占了1.6G&#xff0c;多数情况下是无所谓的。但是有时候在系统内存不足的时候&#xff0c;可能会影响其他程序的执行。 之前就遇到过 jenkins 因为内存不足 集成失败…

SecureCRT Application 已停止工作

解决方法一&#xff1a; cmd ----> regedit —>HKEY_LOCAL_MACHINE\SOFTWARE\vandyke 删掉vandyke 解决方法二&#xff1a; SecureCRT使用过程中出现异常后自动关闭&#xff0c;导致下次无法正常启动&#xff08;运行程序无反应&#xff09;&#xff0c;此时一种可能的原…

SQLServer之事务简介

事务定义 事务是单个的工作单元。事务是在数据库上按照一定的逻辑顺序执行的任务序列&#xff0c;既可以由用户手动执行&#xff0c;也可以由某种数据库程序自动执行。 事务分类 自动提交事务 每条单独的语句都是一个事务。 在自动提交模式下&#xff0c; 每个数据库操作是在执…