Hello,
Here's my scenario. I have an index full of documents. I'm trying to create a new field called parent_folder_path which will be based on the already existing path field.
For example, if path is populated by example/file/path/document.pdf, the parent_folder_path would be example/file/path/.
I'm using an update by query script to try and create the parent_folder_path from the path field using painless script, but I'm having difficulty finding my way about the painless documentation. I'll share what I have so far, any help would be appreciated!
Setup:
PUT my-index
PUT my-index/_mapping
{
    "properties": {
        "path": {"type": "keyword"},
        "parent_folder_path": {"type": "keyword"}
    }
}
PUT my-index/_doc/doc_1 
{
  "path": "files/uploads/doc_1.pdf"
}
PUT my-index/_doc/doc_2
{
  "path": "files/uploads/subdirectory/doc_2.pdf"
}
Update by query attempt:
I know what I need to do, but I don't know the right syntax for it...
POST my-index/_update_by_query?conflicts=proceed
{
  "script": {
    "lang": "painless",
    "source": """
      def temp=ctx._source['parent'];
      def items= temp.splitOnToken('/');
      def temp2=Arrays.toString(items[:-1]);
      ctx._source['parent_folder_path'] = temp2;
    """
  }
}
End goal:
GET my-index/_search
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "my-index",
        "_type" : "_doc",
        "_id" : "doc_1",
        "_score" : 1.0,
        "_source" : {
          "path": "files/uploads/doc_1.pdf",
          "parent_folder_path": "files/uploads/"
        }
      },
      {
        "_index" : "my-index",
        "_type" : "_doc",
        "_id" : "doc_2",
        "_score" : 1.0,
        "_source" : {
          "path": "files/uploads/subdirectory/doc_2.pdf",
          "parent_folder_path": "files/uploads/subdirectory/"
        }
      }
   ]
}