首页 > 解决方案 > Spring Solr 数据 - 动态字段的自定义转换器

问题描述

我在 Solr 中有一些字段,我目前正在映射到 Java,如下所示:

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

这匹配许多动态字段,例如:

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

然后我将该fileDetails映射转换FileAttachments为要在代码中其他地方使用的对象。

这目前导致此类具有一些特定的代码,用于将数据在 Solr 中的存储方式转换为 POJO。

理想情况下,我想把它映射得更像这样:

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

甚至更好(但可能更难完成):

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

然后(除了注释)该类对数据如何存储在 Solr 中一无所知。

但是,问题是,当我尝试为该字段使用自定义转换器时(如此处详述),转换器不会传递一个Map<String, List<String>>实例,保存所有匹配的字段file_*,而是简单地传递一个String实例,保存匹配模式的第一个字段的值。

有没有办法让它通过Map<String, List<String>>实例,或者关于如何让这种转换在课堂之外发生的任何其他想法?

在一个理想的世界中,我会更改 solr 文档,使其成为一个子对象(嗯,它们的列表),但这是不可能的,因为它是遗留系统的一部分。

标签: javaspringsolrspring-dataspring-data-solr

解决方案


推荐阅读