使用 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 嵌套文档的主要内容,如果未能解决你的问题,请参考以下文章
使用 Eclipse Scala IDE 中的 spring-data 注入测试 playframework 2.4