社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Elasticsearch

是否可以运行两个脚本而不是在ElasticSearch中发送两个查询?

Typewar • 5 年前 • 697 次点击  

我有一个简单的问题。

我正在尝试将“标记”附加到ElasticSearch数组中。

我发现在ElasticSearch中很难完全理解脚本函数,但找到了两个执行该任务的查询,但都必须调用。这意味着php(在我的例子中)必须向elasticsearch数据库发送两个post请求,我认为 可以 长期存在一些问题。

我认为只在一个查询中发送所有信息会更安全。

下面的查询是为了更新 votes 调用的数组 tags 1 ,为了 2 . 我相信有比我做的更好的方法。

以下是我使用的查询:

我不知道为什么 votes: 2 有,但它似乎完成了删除标签的工作。正如我所说,我发现在ElasticSearch中很难全神贯注于脚本编写。

POST /db2/links/1/_update
{
  "script": {
    "inline": "for(int i=0;i<ctx._source.tags.size();i++){if(ctx._source.tags[i].name==\"tagname\"){ctx._source.tags.remove(i)}}",
    "params": {
      "votes": 2
    }
  }
}

此查询用于将标记附加到 标签 文档的数组

POST /db2/links/1/_update
{
  "script": {
    "inline": "ctx._source.tags.add(params.appendtags)",
    "params": {
      "appendtags": {
        "name": "tagname",
        "votes": 2
      }
    }
  }
}

在一个查询中,是否有任何方法可以轻松地将这两个脚本组合在一起?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30720
 
697 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Nishant Saini
Reply   •   1 楼
Nishant Saini    5 年前

你可以使用 bulk api 在一次通话中进行多个更新。

POST _bulk
{"update":{"_id":"1","_type":"links","_index":"db2","retry_on_conflict":3}}
{"script":{"inline":"for(int i=0;i<ctx._source.tags.size();i++){if(ctx._source.tags[i].name==\"tagname\"){ctx._source.tags.remove(i)}}","params":{"votes":2}}}
{"update":{"_id":"1","_type":"links","_index":"db2","retry_on_conflict":3}}
{"script":{"inline":"ctx._source.tags.add(params.appendtags)","params":{"appendtags":{"name":"tagname","votes":2}}}}