使用 spring-data solr 嵌套文档

Posted

技术标签:

【中文标题】使用 spring-data solr 嵌套文档【英文标题】:Nested Documents with spring-data solr 【发布时间】:2016-09-30 06:56:47 【问题描述】:

我对spring-data SOLR和SOLR很陌生,所以请原谅我一些愚蠢的菜鸟问题。

目前我正在创建一个 spring-boot 1.4.1.RELEASE 应用程序、spring-data solr 2.0.3.RELEASE 和 solr-solrj 5.5.3 以及 Java 8。

我能够将数据放入本地 SOLR 实例,但 SOLR 中的数据与我预期的不同 - 也许我的预期错了?

我的数据如下所示:

public class Retailer
    /**
     * The number of the retailer, unique identifier
     */
    @Id
    @Indexed
    @Field
    @NotBlank(message = ValidationConstants.ERROR_MISSING_SAP_RETAILER_NUMBER)
    @Column(unique = true)
    private String sapRetailerNumber; // NOSONAR

    /**
     * The company name of the retailer.
     */
    @Field
    @Indexed
    @NotBlank(message = ValidationConstants.ERROR_VALIDATION_MISSING_NAME)
    private String name; // NOSONAR

    @Field(child=true, value="retailerContact")
    @Indexed
    @NotNull(message = ValidationConstants.ERROR_VALIDATION_MISSING_CONTACTINFO)
    @Valid
    private Contact contact;

    @Field(child=true, value="retailerAddress")
    @Indexed
    @NotNull(message = ValidationConstants.ERROR_VALIDATION_MISSING_ADDRESS)
    @Valid
    private Address address;

班级联系人:

public class Contact 
    @Field
    @Indexed
    @NotBlank(message = ValidationConstants.ERROR_VALIDATION_MISSING_EMAIL)
    @Email(message = ValidationConstants.ERROR_VALIDATION_INVALID_EMAIL, regexp = ValidationConstants.EXPRESSION_RFC5322_MAIL)
    private String email; // NOSONAR

    @Field
    @Indexed
    @NotBlank(message = ValidationConstants.ERROR_VALIDATION_MISSING_HOMEPAGE)
    private String homepage; // NOSONAR

    @Field
    @Indexed
    private String phone; // NOSONAR

    @Field
    @Indexed
    private String fax; // NOSONAR

类地址类似于联系人。我期望在 SOLR 中有结构化数据,但对象 Contact 和 Address 是扁平化的。到目前为止,我发现有一个名为 Nested Documents 的功能支持结构化数据,我希望通过提供注释来激活此功能

@Field(child=true, value="retailerContact")

但不幸的是,这并没有改变任何东西。

是否有使用嵌套文档的 spring-data SOLR 示例? spring-data SOLR 主页中链接的示例似乎没有使用此功能。

感谢任何提示,提前谢谢!

【问题讨论】:

我尝试了 2.0.3 和 2.0.5 SpringBoot 但不幸的是没有成功。我们错过了一些我认为在任何教程中都没有详细描述的重要内容。顺便说一句,关于子文档使用的部分在官方参考文档页面上有几段信息。我想这是因为一般没有人使用 Spring data solr 【参考方案1】:

默认的MappingSolrConverter 还不支持嵌套文档。但是您可以切换到使用本机映射的SolrJConverter

@Bean
public SolrTemplate solrTemplate(SolrClient client) 

    SolrTemplate template = new SolrTemplate(client);
    template.setSolrConverter(new SolrJConverter());
    return template;

【讨论】:

不幸的是 SolrJConverter 没有成功。我将代码 sn-p 添加到我的测试配置中,但是将数据放入 solr 的方式没有任何改变。是否有一个功能齐全的演示应用程序可以用作模板?只是为了确保我没有做任何错误配置。 @flexguse 成功了吗? @Root 该项目已有 2 年多的历史了,我不再为它工作了

以上是关于使用 spring-data solr 嵌套文档的主要内容,如果未能解决你的问题,请参考以下文章

SpringData,JPA,MongoDB,Solr,Elasticsearch底层逻辑关系

@Indexed 嵌套属性在 mongo 的 Spring-data 中不起作用

如何在 solr 中编写嵌套的 schema.xml?

Solr搜索父元素,嵌套查询,块连接的嵌套所有子元素。

使用solr检索word文档

SOLR7错误解析word文档