又做投资的网站吗百度seo最成功的优化
Spring Data访问Elasticsearch----Elasticsearch存储库Repositories
- 一、自动创建具有相应映射的索引
- 二、存储库方法的注解
- 2.1 @Highlight
- 2.2 @SourceFilters
- 三、基于注解的配置
- 四、Spring命名空间Namespace
本文包括Elasticsearch存储库实现的细节。
例1:示例Book实体
@Document(indexName="books")
class Book {@Idprivate 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注解设置将要创建的索引的详细信息,更多信息请参见索引设置。
二、存储库方法的注解
2.1 @Highlight
存储库方法上的@Highlight注解定义了应该包含哪些返回的实体高亮字段。要在Book name或summary中搜索某些文本并突出显示找到的数据,可以使用以下存储库方法:
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以获取可能的配置选项。在搜索结果中,可以从SearchHit类检索highlight数据。
2.2 @SourceFilters
有时,用户不需要从搜索中返回实体的所有属性,而只需要返回一个子集。Elasticsearch提供源过滤,以减少通过网络传输到应用程序的数据量。
当使用Query实现和ElasticsearchOperations时,通过在查询上设置源过滤器,这很容易实现。
当使用存储库方法时,有@SourceFilters注解:
interface BookRepository extends Repository<Book, String> {@SourceFilters(includes = "name")SearchHits<Book> findByName(String text);
}
在本例中,除了name之外,返回的Book对象的所有属性都为空。
三、基于注解的配置
Spring Data Elasticsearch存储库支持可以通过JavaConfig使用注解来激活。
例2:使用JavaConfig的Spring Data Elasticsearch存储库
@Configuration
@EnableElasticsearchRepositories( --------1 basePackages = "org.springframework.data.elasticsearch.repositories")
static class Config {@Beanpublic 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注解激活Repository支持。如果没有配置基础包,它将使用它所在的配置类之一。
2. 通过使用[Elasticsearch Operations](https://blog.csdn.net/gabriel_wang_sh/article/details/136813482)中所示的配置之一,提供一个名为elasticsearchTemplate的类型为ElasticsearchOperations的Bean。
3. 让Spring将Repository bean注入到类中。
四、Spring命名空间Namespace
Spring Data Elasticsearch模块包含一个自定义命名空间,允许定义存储库bean以及用于实例化ElasticsearchServer的元素。
使用repositories元素查找Spring Data存储库,如创建存储库实例中所述。
例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/beanshttps://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/data/elasticsearchhttps://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch-1.0.xsd"><elasticsearch:repositories base-package="com.acme.repositories" /></beans>
使用Transport Client或Rest Client元素在上下文中注册一个Elasticsearch Server实例。
例4:使用命名空间的Transport Client
<?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/beanshttps://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/data/elasticsearchhttps://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 Client
<?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/elasticsearchhttps://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsdhttp://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><elasticsearch:rest-client id="restClient" hosts="http://localhost:9200"></beans>