elasticsearch 递增doc_id字段的轻松脚本

8aqjt8rx  于 2023-03-17  发布在  ElasticSearch
关注(0)|答案(1)|浏览(154)

对无痛脚本编程非常陌生,我发现它有很多问题。它和我过去使用过的任何脚本语言都不一样。我100%确定这是一个语法问题,但无法解决。
我有一个包含大量文档的静态索引,希望创建一个唯一的可识别字段,我创建了一个名为“doc_id”的Map,它是一个整数,并将所有值设置为0。
我尝试构造一个for循环来遍历索引中的所有项,并为每个存在的文档将doc_id增加1。

POST index-name/_update_by_query?conflicts=proceed&&wait_for_completion=false
{
  "script": : {
    "source": """
      int i = 0;
      for (item in ctx._source['doc_id']) {
        ctx._source['doc_id']=i;
        i++;
        }
      """
    }.
    "query": {
      "match_all": {}
    }
}

错误:类型:非法参数异常”原因:“无法迭代[java.lang.Integer]”
我的方法正确吗?我应该如何定义一个列表来迭代?我以为这就是“查询”。

4urapxun

4urapxun1#

希望这能有所帮助:

POST increment_index/_update_by_query
{
  "script": {
    "source": "ctx._source.doc_id += params.inc",
    "lang": "painless",
    "params": {
      "inc": 1
    }
  },
  "query": {
    "match_all": {}
  }
}

以上是不言自明的,但如果有什么不清楚的,你可以评论-我会尽量回答。

相关问题