关于spring:Spring认证中国教育管理中心Apache-Solr-的-Spring-数据教程一

40次阅读

共计 5478 个字符,预计需要花费 14 分钟才能阅读完成。

原题目:Spring 认证中国教育管理中心 -Apache Solr 的 Spring 数据教程一(Spring 中国教育管理中心)

Apache Solr 的 Spring 数据教程一
3.1.Spring 命名空间
Spring Data Solr 模块蕴含一个自定义命名空间,容许定义存储库 bean 并具备用于实例化 SolrClient.

应用该 repositories 元素查找 Spring Data 存储库,如创立存储库实例中所述。

以下示例显示了如何设置应用 Spring Data Solr 命名空间的 Solr 存储库:

示例 52. 应用命名空间设置 Solr 存储库

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:solr=”http://www.springframework.org/schema/data/solr”
xsi:schemaLocation=”http://www.springframework.org/schema/beans

https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/solr
https://www.springframework.org/schema/data/solr/spring-solr.xsd">

<solr:repositories base-package=”com.acme.repositories” />
</beans>
应用
solr-serverorembedded-solr-server 元素 SolrClient 在上下文中注册一个实例。

以下示例显示了如何为 HTTP 设置 Solr 客户端:

示例 53.HttpSolrClient 应用命名空间

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:solr=”http://www.springframework.org/schema/data/solr”
xsi:schemaLocation=”http://www.springframework.org/schema/beans

https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/solr
https://www.springframework.org/schema/data/solr/spring-solr.xsd">

<solr:solr-client id=”solrClient” url=”https://locahost:8983/solr” />
</beans>
以下示例显示了如何设置负载平衡 Solr 客户端:

示例 54.LBSolrClient 应用命名空间

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:solr=”http://www.springframework.org/schema/data/solr”
xsi:schemaLocation=”http://www.springframework.org/schema/beans

https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/solr
https://www.springframework.org/schema/data/solr/spring-solr.xsd">

<solr:solr-client id=”solrClient” url=”https://locahost:8983/solr,http://localhost:8984/solr” />
</beans>
以下示例显示了如何设置嵌入式 Solr 服务器:

示例 55. EmbeddedSolrServer 应用命名空间

<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xmlns:solr=”http://www.springframework.org/schema/data/solr”
xsi:schemaLocation=”http://www.springframework.org/schema/beans

https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/data/solr
https://www.springframework.org/schema/data/solr/spring-solr.xsd">

<solr:embedded-solr-server id=”solrClient” solrHome=”classpath:com/acme/solr” />
</beans>
3.2. 基于注解的配置
Spring Data Solr 存储库反对能够通过 XML 命名空间和通过 Java 配置应用正文来激活。

以下示例显示了如何应用 Java 配置设置 Solr 存储库:

示例 56. 应用 Java 配置的 Spring Data Solr 存储库

@Configuration
@EnableSolrRepositories
class ApplicationConfig {

@Bean
public SolrClient solrClient() {

EmbeddedSolrServerFactory factory = new EmbeddedSolrServerFactory("classpath:com/acme/solr");
return factory.getSolrServer();

}

@Bean
public SolrOperations solrTemplate() {

return new SolrTemplate(solrClient());

}
}
后面的配置设置了一个 EmbeddedSolrServer,由 SolrTemplate. Spring Data Solr 存储库通过应用 @EnableSolrRepositories 注解激活,注解实质上带有与 XML 命名空间雷同的属性。如果没有配置根底包,则应用配置类所在的包。

3.3. 应用 CDI 设置 Solr 存储库
您还能够应用 CDI 来设置 Spring Data Solr 存储库,如以下示例所示:

示例 57. 应用 Java 配置的 Spring Data Solr 存储库

class SolrTemplateProducer {

@Produces
@ApplicationScoped
public SolrOperations createSolrTemplate() {

return new SolrTemplate(new EmbeddedSolrServerFactory("classpath:com/acme/solr"));

}
}

class ProductService {

private ProductRepository repository;

public Page<Product> findAvailableProductsByName(String name, Pageable pageable) {

return repository.findByAvailableTrueAndNameStartingWith(name, pageable);

}

@Inject
public void setRepository(ProductRepository repository) {

this.repository = repository;

}
}
3.4. 交易反对
Solr 对服务器级别事务的反对意味着自上次提交、优化或回滚以来的创立、更新和删除操作在服务器上排队,并作为一个组提交、优化或回滚。Spring Data Solr 存储库参加 Spring Managed Transactions 并在实现时提交或回滚更改。

以下示例显示了如何应用 @Transactional 正文来定义事务(在本例中为保留):

@Transactional
public Product save(Product product) {
Product savedProduct = jpaRepository.save(product);
solrRepository.save(savedProduct);
return savedProduct;
}
3.5. 查询方法
本节介绍如何应用 Java 类中的办法创立查问。

3.5.1. 查问查找策略
Solr 模块反对将查问手动定义为 String 或从办法名称派生。

目前没有 QueryDSL 反对。

申明的查问
从办法名称派生查问并不总是足够的,可能会导致办法名称不可读。在这种状况下,您能够应用 Solr 命名查问(参见“应用命名查问”)或应用 @Query 正文(参见“应用 @Query 正文”)。

3.5.2. 查问创立
通常,Solr 的查问创立机制依照查询方法中的形容工作。上面的例子展现了什么是 Solr 查询方法:

示例 58. 依据办法名称创立查问

public interface ProductRepository extends Repository<Product, String> {
List<Product> findByNameAndPopularity(String name, Integer popularity);
}
后面的示例转换为以下 Solr 查问:

q=name:?0 AND popularity:?1
下表形容了 Solr 反对的关键字:

Apache Solr 的 Spring 数据教程一
Apache Solr 的 Spring 数据教程一
汇合类型能够与“Like”、“NotLike”、“StartingWith”、“EndingWith”和“Containing”一起应用。

Page<Product> findByNameLike(Collection<String> name);

3.5.3. 应用 @Query 注解
应用命名查问(请参阅“应用命名查问”)来申明实体查问是一种无效的办法,并且实用于大量查问。因为查问自身与执行它们的 Java 办法相关联,因而您实际上能够应用 Spring Data Solr@Query 批注间接绑定它们。上面的例子应用 @Query 注解来申明一个查问:

示例 59. 应用 @Query 正文在办法中申明查问。

public interface ProductRepository extends SolrRepository<Product, String> {
@Query(“inStock:?0”)
List<Product> findByAvailable(Boolean available);
}
3.5.4. 应用命名查问
命名查问能够保留在属性文件中并连贯到相应的办法。您应该记住“查问查找策略”中形容的命名约定或应用 @Query. 以下示例显示如何在属性文件中申明名称查问:

示例 60. 在属性文件中申明命名查问

Product.findByNamedQuery=popularity:?0
Product.findByName=name:?0
上面的示例应用 findByName 后面示例中申明的命名查问 () 之一:

public interface ProductRepository extends SolrCrudRepository<Product, String> {

List<Product> findByNamedQuery(Integer popularity);

@Query(name = “Product.findByName”)
List<Product> findByAnnotatedNamedQuery(String name);

}
3.6. 文件映射
只管 SolrJ 中曾经反对实体映射,但 Spring Data Solr 附带了本人的映射机制(在下一节中形容)。

DocumentObjectBinder 具备优越的性能。因而,如果您不须要客户映射,咱们建议您应用它。您能够 DocumentObjectBinder 通过 SolrJConverter 在 内注册来切换到 SolrTemplate。

正文完
 0