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



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

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

关联的POJO是

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

}

我的问题有两个部分:

a)这可以通过SolrJ实现吗?文档只包含一个使用List of String的@Field示例,所以我假设序列化/封送只支持简单类型?

b)我如何设置模式来保存这个。我有一个幼稚的假设,我只需要建立multivalue =true在必填字段&这一切都会变的神奇。

我刚刚开始实现这个,所以任何回应将是非常感谢的。

答案如你所想:

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

b)问题是你正在尝试的是在"文档存储"中表示关系思维。这可能只在一定程度上有效。如果你想在lucene文档中表示类别,只需要使用字符串,而不需要存储id。

存储id的唯一目的是:如果您想在RDBMS上进行查找,而不是搜索。如果要这样做,需要确保id和类别名称是软链接的。这并不适用于每一个1:n关系。(每个1:n关系,其中n个相关表只包含必需的字段,都是可能的。如果你有一个可选的字段,你需要在字段中添加一个填充空常量(如果可能的话)。

但是,如果这些1:n关系不是稀疏的,实际上如果您保持向文档添加字段的顺序,则有可能。所以如果你不对列表排序,类别关系的情况可能会被表示出来。

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

最新更新