Данные Spring Solr - пользовательский преобразователь для полей Dynami c - PullRequest
1 голос
/ 05 августа 2020

У меня есть несколько полей в Solr, которые я в настоящее время сопоставляю с Java, например:

@Field("file_*") @Dynamic private final Map<String, List<String>> fileDetails;

это соответствует ряду динамических c полей, например:

file_name_1
file_type_1
file_size_1
...
file_name_2
file_type_2
file_size_2
...
...

Затем я конвертирую эту fileDetails карту в FileAttachments объект, который будет использоваться в другом месте кода.

Это в настоящее время приводит к тому, что этот класс имеет некоторый код c для преобразования из того, как данные хранится в Solr, в POJO.

В идеале я бы хотел отобразить его так:

@Field("file_*") private final FileAttachments attachments;

или даже лучше (но, возможно, еще сложнее выполнить sh ):

@Field("file_*") private final List<FileAttachment> attachments;

Затем (кроме аннотаций) класс ничего не знает о том, как данные хранятся в Solr.

Однако проблема в том, что когда я пытаюсь использовать пользовательский преобразователь для поля (, как подробно описано здесь ), преобразователю не передается экземпляр Map<String, List<String>>, содержащий все поля, соответствующие file_*, вместо этого ему просто передается экземпляр String, содержащее значение первого поля, которое соответствует шаблону.

Есть ли каким-либо способом заставить его передать экземпляр Map<String, List<String>> или любые другие мысли относительно того, как я могу заставить это преобразование происходить вне класса?

В идеальном мире я бы изменил документ solr так это был дочерний объект (ну, их список), но это невозможно, поскольку он является частью устаревшей системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...