Solr,作为Spring Data模块

10月底,我参加了为期3天的Solr培训。 鉴于我在年中参加了以前的Elastic Search演讲 ,这非常有趣。 作为老的Spring Data爱好者,当我发现Spring Data提供了Solr模块时,我就抓住了尝试它的机会。

在这种情况下,我很清楚Solr上的抽象层并不意味着我们可以轻松更改基础数据存储:Solr被设计为反向索引,而其他Spring Data模块则更加专门化(JPA,MongoDB等) )。 但是,与Solr相比,使用Spring Data仍有一些优点:

  • 快速原型,当您不需要整个九码时
  • 当大多数团队已经了解Spring Data而不是Solr时,请使用Solr
  • 从底部进行Spring集成
  • 最后但并非最不重要的一点是,您可以轻松地在嵌入式Solr和独立的Solr之间切换。 Spring Data很好地将Solrj API和HTTP都包装在其自己的API之后。 如果您认为这不是相关用例,因为它永远不会发生,请考虑进行集成测试

在使用相关数据初始化Solr之后,您必须完成以下步骤才能开始开发:

  1. 第一步是使用基础Solr配置Spring上下文。 Spring数据的Solr需要的bean solrTemplate类型的SolrOperations 为此使用JavaConfig:
    @Configuration
    @EnableSolrRepositories("ch.frankel.blog.springdata.solr.repository")
    publicclassJavaConfig{
    
        @Bean
        protectedHttpSolrServerFactoryBeansolrServerFactory(){
            HttpSolrServerFactoryBeanfactory=newHttpSolrServerFactoryBean();
            factory.setUrl("http://localhost:8983/solr");
            returnfactory;
        }
    
        @Bean
        publicSolrOperationssolrTemplate()throwsException{
            returnnewSolrTemplate(solrServerFactory().getObject());
        }
    }
  2. 创建管理实体。 Solr中存储的所有字段都必须使用@Field注释。 如果实体属性名称与Solr字段名称不同,则@Field接受一个值来覆盖该名称:
    publicclassLoan{
    
        @Field
        privateStringid;
    
        @Field("gov_type")
        privateStringgovernmentType;
    
        // Getters and setters
    }
  3. 创建存储库接口:从SolrRepository<Bean,ID>SolrCrudRepository<Bean,ID>继承。 请注意,前者仅提供count()方法。
    publicinterfaceLoanRepositoryextendsSolrRepository<Loan,String>{}
  4. 向前一个界面添加查询方法:
    • 简单的查询方法受益于Spring数据解析: List<Loan> findByLoanType(String)将转换为?q=loan_type:…​
    • 更高级的查询(或名称不遵循此模式的方法)应使用@Query注释: @Query("state_name:[* TO *]")将找到所有具有state_name值的state_name 注释可以通过使用?x绑定尽可能多的参数,其中x是方法参数列表中的参数索引。
    • @Facet面也通过@Facet注释处理,该注释采用构面应使用的字段名称。 但是,这会将方法签名更改为FacetPage并且要由调用方法(可能位于服务层)来处理。

最终的类应该看起来像这样,考虑到它提供的所有功能,这真是太棒了:

publicinterfaceLoanRepositoryextendsSolrRepository<Loan,String>{

    List<Loan>findByLoanType(Stringloan);
    List<Loan>findByTitleContaining(Stringtitle);

    @Query("state_name:[* TO *]")
    List<Loan>findLocalized();

    @Query("*:*")
    @Facet(fields="loan_type")
    FacetPage<Loan>findAllLoanTypes(Pageablepage);
}

整个项目源代码可出现在的IntelliJ / Maven的格式,完整的测试。 请注意,您将需要一个具有特定Solr模式和文档的运行中的Solr实例。 提供了模式和文档文件(federal.xml),但它们不是自动的:您需要将模式和文档文件覆盖到正在运行的实例中(使用经典的java -jar post.jar命令行) 。

翻译自: https://blog.frankel.ch/solr-as-a-spring-data-module/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值