Упорядоченный список в painless

Есть поле типа keyword. Там хранится массив.
["40","1","11","4","7","10"]
В скрипте хочу выдрать часть массива начиная с какого то элемента. Но, до этого не доходит, т.к. когда я хочу получить ArrayList меняется сортировка.
ArrayList l1 = new ArrayList(doc['path']);return l1
Получаю:
[ "1", "10", "11", "4", "40", "7" ]
Т.е. явно отсортировано "по алфавиту". Если, например делаю так:
ArrayList l1 = new ArrayList([\"40\",\"1\",\"11\",\"4\",\"7\",\"10\"]);return l1
Получаю правильную последоваиельность:
[ "40", "1", "11", "4", "7", "10" ]
Что я делаю не так?

Где этот скрипт вызывается?

Экспериментирую в "script_fields".
Но, в конце концов дожен попасть в "agg" -> "terms" -> "script".

...
  "script_fields":{
    "shortpath": {
      "script": {
        "source":"ArrayList l1 = new ArrayList(doc['path'].toArray());return l1",
        "params":{
          "roots":["7"]
        }
      }
    }
  }
...

doc['path'] вытаскивает результаты из doc values, в которых порядок значений уже потерян. Если порядок важен - надо вытаскивать из _source.

Как в этом убедиться?

Наверное это будет сильно медленее.

Чтением документации, или анализом кода.

Да, будет медленнее.

Какой максимальный размер массива и что вы потом собрались с этими значениями делать?

Что то не вижу где сказано, что порядок элементов в массиве не гарантируется.

Наверное от 1 до 30. Но документов много. Потом агрегировать, что бы понят сколько документов к какой подгруппе относятся. Поэтому важен порядок следования.

Как подгруппа определяется? Порядок важен, а позиция не важна?

Думаю что важна, т.к. при запросе я говорю "все документы вот в этом подразделе".
Т.е. это может быть и цифра "4" и цифра "7" из примера выше.

Важно ли, что цифра 4 стоит на позиции 4, и 7 - на позиции 5. Как определяется подраздел?

Не, условно там могут присвоить любую другую цифру или UUID потом составить из этого какую то иерархию. У документа получается последовательность.
Например.
doc1:1,2,3
doc2:1,2,4
doc3:1,5,6.
Если при поиске надо найти например, в узле 2. Нашли фильтром эти документы. А в агрегачии их что их 2. Сответвенно иерархие может ветвится.

Хорошо, я понял что это иерархический ключ. Что такое узел 2?

А если у вас документы

doc3: 3,2,1 - этот документ будет появиться в поиске?

doc4: 2,1,3 - такое возможно или 2 может быть только на втором месте?

Нет. 1 это какой то корень.
Допустим:
1 - фотобумага.
2 - глянцевая фотобумага
5 - матовая фотобумага
3 - глянцевая фотобумага 10х15
4 - глянцевая фотобумага 20х15

Ищем в цзле 2 "глянцевая фотобумага 10х15", находим в самом верху , то что ищем doc3, далее менее релевантныt doc4 и имя узла "глянцевая фотобумага". И в агрегации, что всего в этом узле 3 совпадения.
Может быть более сложная струкрута, тогда их надобудет сгруппировать.

Тогда может иметь смысл хранить это по уровням - level1, level2, level3 и т.д.

Тоже не очень. Один документ может находиться в разных независимых иерархиях.

Если честно, я все-равно не понимаю что вы пытаетесь делать с этими данными и все мои попытки "выудить" эту информацию из вас отнимают слишком много времени. Если вы можете описать проблему полностью с примерами данных и операциями, которые вы с этими данными собираетесь проводить, я мог бы что-то подсказать, но продолжать дискуссию в данном режиме, у меня, к сожалению, времени сейчас нет.

Да вроде суть-то очевидна. Есть туева хуча (облако) документов. Каждый клиент может "шарить" свой документ другому клиенту. Т.к. каждый клиент волен из документов организовывать свою иерархию. (Например, своя копия "мои документы" ) у каждого клиента стоя иерархия документов. Поэтому у одного документа может быть несколько иерархий.

Задача в том, чтобы клинет искал не во всем облаке, а только в тех данных, что ему доступны. А во вторых, дать ему возможность делать поиск в конкретных своих поддиректориях. И показывать количество найденых докуаментов в какиз то поддиректориях.

Идея была в том, что в документе хранится для каждого клиента свой массив UUID-ов описывающий его иерархию. Последовательность ["40","1","11","4","7","10"] уникальная во всем облаке описывающая иерархию конкретного клинета. Т.е. 40, 1, 11... это уникальные UUIDы в всем наборе документов.

это уникальные UUIDы в всем наборе документов.

То есть 40, 1, 11, 4 и т.д. - это уникальные UUID вложенных директорий? И если 40 - это моя корневая директория и 1 - это поддиректория в ней, то больше ни у кого в системе не может быть директорий с такими UUID?

И показывать количество найденых докуаментов в какиз то поддиректориях.

То есть если я ищу в ["40", "1"] туда должны входить документы из ["40", "1", "11", "4"]?

Да. Это всё не переекающиеся ни у одного пользователя уникальные UUID-ы.
Т.е. UUID "3" замапленное "Мои документы" у одного ползователя не может пересечся с "75" замаппленное "Мои документы" у другого пользователя.