solrj:如何通过索引中的多值字段存储和检索List

我的用例是一个包含在线媒体标题的索引。 数据提供者将类别列表与每个标题相关联。 我正在使用SolrJ通过带注释的POJO类填充索引

例如

@Field("title") private String title; @Field("categories") private List categoryList; 

相关的POJO是

 public class Category { private Long id; private String name; ... 

}

我的问题有两个部分:

a)这可能通过SolrJ – 文档只包含一个使用List of String的@Field的例子,所以我假设序列化/编组只支持简单类型?

b)如何设置架构来保存它。 我有一个天真的假设我只需要在必填字段上设置multiValued = true它将全部通过魔法工作。

我刚刚开始实施这一点,所以任何回复都将受到高度赞赏。

答案是你想的:

a)您只有简单的类型。 所以你将拥有一个相同类型的List,例如String。 关键是你不能在lucene文档中表示复杂类型,所以你也不会反序列化它们。

b)问题在于您尝试在“文档存储”中表示关系思维。 这可能只适用于某一点。 如果你想在lucene文档中表示类别,只需使用字符串,也不必存储id。

存储id的唯一要点是:如果你想在RDBMS上搜索查找。 如果要执行此操作,则需要确保id和类别名称是软链接的。 这不适用于每个1:n关系。 (每个1:n关系,其中n相关表只包含必填字段。如果你有一个可选字段,你需要在字段中输入类似填充空常量的东西,如果可能的话)。

但是,如果这些1:n关系不是稀疏的,那么如果你保持向文档中添加字段的顺序,它实际上是可能的。 因此,如果您不对列表进行排序,则可能会显示类别关系的情况。

如果使用位置0 … n处的值对其进行实例化,则可以实现一个返回此类别的方法。 因此,解决方案是,如果您想要第一个类别,它将位于与此类别相关的每个列表的第0位。