Java solrj:如何存储和检索列表<;POJO>;通过索引中的多值字段

Java solrj:如何存储和检索列表<;POJO>;通过索引中的多值字段,java,lucene,solr,solrj,Java,Lucene,Solr,Solrj,我的用例是一个包含在线媒体标题的索引。数据提供者将类别列表与每个标题相关联。我使用SolrJ通过带注释的POJO类填充索引 e、 g } 我的问题分为两部分: a) 这是否可以通过SolrJ实现?文档仅包含使用字符串列表的@Field示例,因此我假设序列化/编组仅支持简单类型 b) 我将如何设置模式来保存这个。我有一个天真的假设,我只需要设定 在所需字段上,multiValued=true&它将通过魔术实现 我刚刚开始实施这一点,因此我们非常感谢您的回复。答案如您所想: a) 您只有简单的可用类

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

e、 g

}

我的问题分为两部分:

a) 这是否可以通过SolrJ实现?文档仅包含使用字符串列表的@Field示例,因此我假设序列化/编组仅支持简单类型

b) 我将如何设置模式来保存这个。我有一个天真的假设,我只需要设定 在所需字段上,multiValued=true&它将通过魔术实现


我刚刚开始实施这一点,因此我们非常感谢您的回复。

答案如您所想:

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

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

存储id的唯一一点是:如果您不想进行搜索,请在RDBMS上进行查找。如果要执行此操作,需要确保id和类别名称是软链接的。这并不适用于每个1:n关系。(每个1:n关系都是可能的,其中n相关表仅由必填字段组成。如果您有可选字段,则需要在字段中添加填充空常量之类的内容(如果可能)

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

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

@Field("title")
private String title;

@Field("categories")
private List<Category> categoryList;
public class Category {
    private Long id;
    private String name;
...