Ответ, как вы и думали:
а) Доступны только простые типы. Таким образом, у вас будет список того же типа, например Строка. Дело в том, что вы не можете представлять сложные типы внутри документа lucene, поэтому вы также не сможете их десериализовать.
б) Проблема в том, что вы пытаетесь представить реляционное мышление в «хранилище документов». Это, вероятно, будет работать только до определенного момента. Если вы хотите представлять категории внутри документа lucene, просто используйте строку, поэтому не обязательно хранить идентификатор.
Единственное, что нужно для сохранения идентификатора, это: если вы хотите выполнить поиск в СУБД. Если вы хотите сделать это, вы должны убедиться, что идентификатор и название категории имеют мягкую связь. Это не работает для каждого отношения 1: n. (Возможно любое отношение 1: n, в котором таблица, связанная с n, состоит только из обязательных полей. Если у вас есть необязательное поле, вам необходимо поместить что-то вроде заполнения константы в поле, если возможно).
Однако, если эти отношения 1: n не редки, на самом деле это возможно, если вы поддерживаете порядок добавления полей в документ. Таким образом, случай с отношением категории может быть представлен, если вы не сортируете списки.
Вы можете реализовать метод, который возвращает эту категорию, если вы создаете ее экземпляр со значениями в позиции 0 ... n. Таким образом, решение было бы, если вы хотите иметь первую категорию, она будет в позиции 0 каждого списка, связанного с этой категорией.