|
该版本仍在开发中,尚未被视为稳定。对于最新稳定版本,请使用Spring Data Elasticsearch 5.5.5! |
Elasticsearch 仓库
本章包含了Elasticsearch仓库实现的详细信息。
书实体@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 ...
}
自动创建带有相应映射的索引
这@Document注释有一个参数createIndex.
如果该参数设置为 true——这是默认值——Spring Data Elasticsearch 在启动应用时启动仓库支持时会检查由@Document注释存在。
如果不存在该索引,索引将被创建,并从实体注释中推导出的映射(参见 Elasticsearch 对象映射)将写入新创建的索引。
将要创建的索引细节可以通过使用@Setting注释,请参阅索引设置以获取更多信息。
仓库方法的注释
@Highlight
这@Highlight仓库方法的注释定义了返回实体中应包含高亮的字段。在书的名称或摘要,并高亮显示找到的数据,可以使用以下存储方法:
interface BookRepository extends Repository<Book, String> {
@Highlight(fields = {
@HighlightField(name = "name"),
@HighlightField(name = "summary")
})
SearchHits<Book> findByNameOrSummary(String text, String summary);
}
可以定义多个字段,如上所述,并且@Highlight以及@HighlightField注释还可以进一步通过@HighlightParameters注解。查看Javadocs里可能的配置选项。
在搜索结果中,可以从以下位置检索高光数据搜索击中类。
@SourceFilters
有时用户不需要从搜索中返回实体的所有属性,只需返回部分。 Elasticsearch 提供源过滤功能,以减少跨网络传输的数据量 应用。
在与查询实现及弹性搜索作这可以通过设置 a 轻松实现
查询时的来源过滤器。
使用存储库方法时,有@SourceFilters注解:
interface BookRepository extends Repository<Book, String> {
@SourceFilters(includes = "name")
SearchHits<Book> findByName(String text);
}
在这个例子中,返回的所有属性书对象为零除了名字。
基于注释的配置
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 | 这EnableElasticsearchRepositories注释激活了仓库支持。
如果没有配置基础包,它会使用它所属配置类中的一个。 |
| 2 | 提供一个名为elasticsearch模板类型弹性搜索作通过使用弹性搜索运算章节中展示的配置之一。 |
| 3 | 让 Spring 将 Repository 豆注入到你的类中。 |
春季命名空间
Spring Data Elasticsearch 模块包含自定义命名空间,允许定义仓库 beans 以及实例化ElasticsearchServer.
使用存储 库元素查找 Spring Data 仓库,详见“创建仓库实例”。
<?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>
使用运输客户端或Rest 客户端元素注册 的实例弹性搜索服务器在语境中。
<?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>