网页设计作品展示图片,网站是怎么优化的,中建官网,wordpress 加上微信打赏大家好#xff0c;我是烤鸭#xff1a;今天分享的是官网6.x 单一文档(Single document APIs)APIs。本文这是部分翻译#xff0c;如果想看全部的#xff0c;还是建议阅读官方api。链接#xff1a;https://www.elastic.co/guide/en/elasticsearch/reference/current/docs…大家好我是烤鸭今天分享的是官网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?routingkimchy以上将删除带有索引为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?timeout5m2. 更新 (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 。versionUpdate 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