对于最新的稳定版本,请使用 Spring Data Elasticsearch 5.4.0! |
Elasticsearch 存储库
本章包括 Elasticsearch 存储库实施的详细信息。
Book
@Document(indexName="books")
class Book {
@Id
private String id;
@Field(type = FieldType.Text)
private String name;
@Field(type = FieldType.Text)
private String summary;
@Field(type = FieldType.Integer)
private Integer price;
// getter/setter ...
}
使用相应的映射自动创建索引
注释具有参数 。
如果此参数设置为 true(这是默认值),则 Spring Data Elasticsearch 将在引导存储库支持期间,在应用程序启动时检查注释定义的索引是否存在。@Document
createIndex
@Document
如果不存在,则将创建索引,并将从实体注释派生的映射(请参阅 Elasticsearch 对象映射)写入新创建的索引。
可以使用注释设置将要创建的索引的详细信息,请参阅 索引设置 以了解更多信息。@Setting
存储库方法的注释
@Highlight
存储库方法上的注释定义应包含返回的实体突出显示的哪些字段。要在 名称或摘要中搜索某些文本并突出显示找到的数据,可以使用以下存储库方法:@Highlight
Book
interface BookRepository extends Repository<Book, String> {
@Highlight(fields = {
@HighlightField(name = "name"),
@HighlightField(name = "summary")
})
SearchHits<Book> findByNameOrSummary(String text, String summary);
}
可以定义多个字段以突出显示,如上所述,并且 the 和 annotation 都可以使用 annotation 进一步自定义。检查 Javadocs 以获取可能的配置选项。@Highlight
@HighlightField
@HighlightParameters
在搜索结果中,可以从类中检索 highlight 数据。SearchHit
@SourceFilters
有时,用户不需要从搜索中返回实体的所有属性,而只需要返回一个子集。 Elasticsearch 提供源筛选功能,以减少通过网络传输到 应用。
当使用 implementation 并且 this 可以通过设置
source 筛选条件。Query
ElasticsearchOperations
当使用存储库方法时,有 annotation:@SourceFilters
interface BookRepository extends Repository<Book, String> {
@SourceFilters(includes = "name")
SearchHits<Book> findByName(String text);
}
在此示例中,返回对象的所有属性都将是除 name 之外的所有属性。Book
null
基于注释的配置
Spring Data Elasticsearch 存储库支持可以通过 JavaConfig 使用注释来激活。
@Configuration
@EnableElasticsearchRepositories( (1)
basePackages = "org.springframework.data.elasticsearch.repositories"
)
static class Config {
@Bean
public ElasticsearchOperations elasticsearchTemplate() { (2)
// ...
}
}
class ProductService {
private ProductRepository repository; (3)
public ProductService(ProductRepository repository) {
this.repository = repository;
}
public Page<Product> findAvailableBookByName(String name, Pageable pageable) {
return repository.findByAvailableTrueAndNameStartingWith(name, pageable);
}
}
1 | 注释将激活 Repository 支持。
如果未配置基础包,它将使用它所放置的配置类之一。EnableElasticsearchRepositories |
2 | 使用 Elasticsearch Operations 章节中所示的配置之一提供名为 type 的 Bean。elasticsearchTemplate ElasticsearchOperations |
3 | 让 Spring 将 Repository bean 注入到你的类中。 |
Spring 命名空间
Spring Data Elasticsearch 模块包含一个自定义命名空间,允许定义存储库 bean 以及用于实例化 .ElasticsearchServer
使用该元素可查找 Spring Data 存储库,如创建存储库实例中所述。repositories
<?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:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/data/elasticsearch
https://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd">
<elasticsearch:repositories base-package="com.acme.repositories" />
</beans>
使用 or 元素在上下文中注册 的实例。Transport Client
Rest Client
Elasticsearch Server
<?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:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/data/elasticsearch
https://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd">
<elasticsearch:transport-client id="client" cluster-nodes="localhost:9300,someip:9300" />
</beans>
<?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:elasticsearch="http://www.springframework.org/schema/data/elasticsearch"
xsi:schemaLocation="http://www.springframework.org/schema/data/elasticsearch
https://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<elasticsearch:rest-client id="restClient" hosts="http://localhost:9200">
</beans>