最新的稳定版本请使用 Spring Data Elasticsearch 5.3.1Spring中文文档

最新的稳定版本请使用 Spring Data Elasticsearch 5.3.1Spring中文文档

本章详细介绍了 Elasticsearch 存储库的实现。Spring中文文档

例 1.示例实体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 将在启动应用程序启动时引导存储库支持期间检查注解定义的索引是否存在。@DocumentcreateIndex@DocumentSpring中文文档

如果该索引不存在,则将创建索引,并将从实体注释派生的映射(请参阅 Elasticsearch 对象映射)写入新创建的索引。 可以使用注释设置将要创建的索引的详细信息,有关详细信息,请参阅索引设置@SettingSpring中文文档

存储库方法的注释

@Highlight

存储库方法上的注释定义应包含返回实体突出显示的哪些字段。要搜索 的名称或摘要中的某些文本并突出显示找到的数据,可以使用以下存储库方法:@HighlightBookSpring中文文档

interface BookRepository extends Repository<Book, String> {

    @Highlight(fields = {
        @HighlightField(name = "name"),
        @HighlightField(name = "summary")
    })
    SearchHits<Book> findByNameOrSummary(String text, String summary);
}

可以像上面一样定义要突出显示的多个字段,并且可以使用注释进一步自定义注释和注释。检查 Javadocs 以获取可能的配置选项。@Highlight@HighlightField@HighlightParametersSpring中文文档

在搜索结果中,可以从类中检索突出显示数据。SearchHitSpring中文文档

@SourceFilters

有时,用户不需要从搜索中返回实体的所有属性,而只需要返回一个子集。 Elasticsearch 提供源过滤功能,以减少通过网络传输到 应用。Spring中文文档

在使用实现时,这很容易通过设置一个 查询的源筛选器。QueryElasticsearchOperationsSpring中文文档

使用存储库方法时,有注释:@SourceFiltersSpring中文文档

interface BookRepository extends Repository<Book, String> {

    @SourceFilters(includes = "name")
    SearchHits<Book> findByName(String text);
}

在此示例中,返回对象的所有属性都将是除名称之外的。BooknullSpring中文文档

基于注释的配置

Spring Data Elasticsearch 存储库支持可以通过 JavaConfig 使用注释来激活。Spring中文文档

例 2.使用 JavaConfig 的 Spring Data Elasticsearch 存储库
@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 Operations 一章中所示的配置之一提供名为类型的 Bean。elasticsearchTemplateElasticsearchOperations
3 让 Spring 将 Repository Bean 注入到您的类中。
1 注释将激活存储库支持。 如果未配置基本包,它将使用放置它的配置类之一。EnableElasticsearchRepositories
2 使用 Elasticsearch Operations 一章中所示的配置之一提供名为类型的 Bean。elasticsearchTemplateElasticsearchOperations
3 让 Spring 将 Repository Bean 注入到您的类中。

Spring 命名空间

Spring Data Elasticsearch 模块包含一个自定义命名空间,允许定义存储库 Bean 以及用于实例化 .ElasticsearchServerSpring中文文档

使用该元素查找 Spring Data 存储库,如创建存储库实例中所述。repositoriesSpring中文文档

例 3.使用 Namespace 设置 Elasticsearch 存储库
<?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 ClientRest ClientElasticsearch ServerSpring中文文档

例 4.使用命名空间的传输客户端
<?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>
例 5.使用命名空间的 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/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>