- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Elasticsearch 6.1.3 进行了这些实验。
脚本
为单行这是我的 shell 脚本:
# Index document.
curl -sX PUT -H 'Content-Type: application/json' \
http://localhost:9200/a/a/1?pretty -d '{ "n": 10 }'
# Delete document (single-line script)
curl -siX POST -H 'Content-Type: application/json' \
http://localhost:9200/a/a/1/_update?pretty -d '{
"script": "ctx.op = ctx._source.n == 10 ? \"delete\" : \"none\""
}'
# Print document.
sleep 1
curl -si http://localhost:9200/a/a/1?pretty
这是最后两个 curl 命令的输出:
+ curl -siX POST -H 'Content-Type: application/json' 'http://localhost:9200/a/a/1/_update?pretty' -d '{
"script": "ctx.op = ctx._source.n == 10 ? \"delete\" : \"none\""
}'
HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 213
{
"_index" : "a",
"_type" : "a",
"_id" : "1",
"_version" : 4,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 20,
"_primary_term" : 1
}
+ sleep 1
+ curl -si 'http://localhost:9200/a/a/1?pretty'
HTTP/1.1 404 Not Found
content-type: application/json; charset=UTF-8
content-length: 72
{
"_index" : "a",
"_type" : "a",
"_id" : "1",
"found" : false
}
如预期的那样,文档已被删除。
脚本
作为对象这是我的 shell 脚本:
# Index document.
curl -sX PUT -H 'Content-Type: application/json' \
http://localhost:9200/a/a/1?pretty -d '{ "n": 10 }'
# Print document.
sleep 1
curl http://localhost:9200/a/a/1?pretty
# Delete document (single-line script)
curl -siX POST -H 'Content-Type: application/json' \
http://localhost:9200/a/a/1/_update?pretty -d '{
"script": {
"inline": "ctx.op = ctx._source.n == params.count ? \"delete\" : \"none\"",
"params": {
"count": 10
}
}
}'
# Print document.
sleep 1
curl -si http://localhost:9200/a/a/1?pretty
这是最后两个 curl 命令的输出:
+ curl -siX POST -H 'Content-Type: application/json' 'http://localhost:9200/a/a/1/_update?pretty' -d '{
"script": {
"inline": "ctx.op = ctx._source.n == params.count ? \"delete\" : \"none\"",
"params": {
"count": 10
}
}
}'
HTTP/1.1 200 OK
Warning: 299 Elasticsearch-6.1.3-af51318 "Deprecated field [inline] used, expected [source] instead" "Sat, 10 Feb 2018 10:58:57 GMT"
content-type: application/json; charset=UTF-8
content-length: 213
{
"_index" : "a",
"_type" : "a",
"_id" : "1",
"_version" : 2,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 22,
"_primary_term" : 1
}
+ sleep 1
+ curl -si 'http://localhost:9200/a/a/1?pretty'
HTTP/1.1 404 Not Found
content-type: application/json; charset=UTF-8
content-length: 72
{
"_index" : "a",
"_type" : "a",
"_id" : "1",
"found" : false
}
如预期的那样,文档已被删除。
script
使用 params
作为单行这是我的 shell 脚本:
# Index document.
curl -sX PUT -H 'Content-Type: application/json' \
http://localhost:9200/a/a/1?pretty -d '{ "n": 10 }'
# Print document.
sleep 1
curl http://localhost:9200/a/a/1?pretty
# Delete document (single-line script)
curl -siX POST -H 'Content-Type: application/json' \
http://localhost:9200/a/a/1/_update?pretty -d '{
"script": "ctx.op = ctx._source.n == params.count ? \"delete\" : \"none\"",
"params": {
"count": 10
}
}'
# Print document.
sleep 1
curl -si http://localhost:9200/a/a/1?pretty
这是最后两个 curl 命令的输出:
+ curl -siX POST -H 'Content-Type: application/json' 'http://localhost:9200/a/a/1/_update?pretty' -d '{
"script": "ctx.op = ctx._source.n == params.count ? \"delete\" : \"none\"",
"params": {
"count": 10
}
}'
HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 169
{
"_index" : "a",
"_type" : "a",
"_id" : "1",
"_version" : 1,
"result" : "noop",
"_shards" : {
"total" : 0,
"successful" : 0,
"failed" : 0
}
}
+ sleep 1
+ curl -si 'http://localhost:9200/a/a/1?pretty'
HTTP/1.1 200 OK
content-type: application/json; charset=UTF-8
content-length: 123
{
"_index" : "a",
"_type" : "a",
"_id" : "1",
"_version" : 1,
"found" : true,
"_source" : {
"n" : 10
}
}
为什么这次没有删除文档?
根据 https://www.elastic.co/guide/en/elasticsearch/guide/current/partial-updates.html 处的文档这应该删除文件。引用文档:
We can even choose to delete a document based on its contents, by setting
ctx.op
todelete
:POST /website/blog/1/_update
{
"script" : "ctx.op = ctx._source.views == count ? 'delete' : 'none'",
"params" : {
"count": 1
}
}
为什么这不起作用?
最佳答案
我认为这是权威指南中的一个错误,它实际上是一种正在进行中的工作(当前有效版本适用于 ES 的 2.x 版本)。错误基本上是在 script
外壳之外使用 params
。您的实验 #2 应该是将 params
与脚本一起用于部分 _update
的正确格式。
但是,我认为它也是错误的,因为使用此语法时 ES 不会返回错误消息。因此,我创建了 https://github.com/elastic/elasticsearch/issues/28740为此。
关于curl - 为什么 Elasticsearch _update with "script"using "params"不删除文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48720054/
我想使用现有的 Couchdb 文档来深度合并此请求的一些数据 请求:: curl -H "Content-Type: application/json" -X POST http://localho
我直接将数据添加到 mongodb,现在缺少 _etag、_created 和 _updated 字段。如何为没有这些内容的文档生成这些内容? 谢谢 最佳答案 这些文档上的 GET 将为您透明地获取这
有没有办法从 _update 函数将新创建的文档的 _rev 和 _id 字段返回给客户端? 最佳答案 您可以,但是解决方案并不完美。 您已经知道文档 _id在更新功能中。要么您自己计算,要么使用用户
我使用 Elasticsearch 6.1.3 进行了这些实验。 实验 1:脚本 为单行 这是我的 shell 脚本: # Index document. curl -sX PUT -H 'Conte
目前,我使用的客户端go-elasticsearch版本v7.8.0和elastic版本8.1.2。 Elasticsearch 从版本 7.x 更新 现在,当我尝试更新文档时,它失败并出现以下错误。
我是一名优秀的程序员,十分优秀!