Elasticsearch 仓库

本章包含了Elasticsearch仓库实现的详细信息。spring-doc.cadn.net.cn

例子1。样本实体
@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注释存在。spring-doc.cadn.net.cn

如果不存在该索引,索引将被创建,并从实体注释中推导出的映射(参见 Elasticsearch 对象映射)将写入新创建的索引。 将要创建的索引细节可以通过使用@Setting注释,请参阅索引设置以获取更多信息。spring-doc.cadn.net.cn

仓库方法的注释

@Highlight

@Highlight仓库方法的注释定义了返回实体中应包含高亮的字段。在的名称或摘要,并高亮显示找到的数据,可以使用以下存储方法:spring-doc.cadn.net.cn

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里可能的配置选项。spring-doc.cadn.net.cn

在搜索结果中,可以从以下位置检索高光数据搜索击中类。spring-doc.cadn.net.cn

@SourceFilters

有时用户不需要从搜索中返回实体的所有属性,只需返回部分。 Elasticsearch 提供源过滤功能,以减少跨网络传输的数据量 应用。spring-doc.cadn.net.cn

在与查询实现及弹性搜索作这可以通过设置 a 轻松实现 查询时的来源过滤器。spring-doc.cadn.net.cn

使用存储库方法时,有@SourceFilters注解:spring-doc.cadn.net.cn

interface BookRepository extends Repository<Book, String> {

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

在这个例子中,返回的所有属性对象为除了名字。spring-doc.cadn.net.cn

基于注释的配置

Spring Data Elasticsearch 仓库支持可以通过 JavaConfig 的注释激活。spring-doc.cadn.net.cn

例子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模板类型弹性搜索作通过使用弹性搜索运算章节中展示的配置之一。
3 让 Spring 将 Repository 豆注入到你的类中。

春季命名空间

Spring Data Elasticsearch 模块包含自定义命名空间,允许定义仓库 beans 以及实例化ElasticsearchServer.spring-doc.cadn.net.cn

使用存储 库元素查找 Spring Data 仓库,详见“创建仓库实例”。spring-doc.cadn.net.cn

例子3。使用命名空间建立 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>

使用运输客户端Rest 客户端元素注册 的实例弹性搜索服务器在语境中。spring-doc.cadn.net.cn

例子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>