当前位置: 首页 > news >正文

Spring Data访问Elasticsearch----Elasticsearch存储库Repositories

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的类型为ElasticsearchOperationsBean3.SpringRepository 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>
http://www.lryc.cn/news/322191.html

相关文章:

  • 初探 Cocos Creator: 碰撞与物理系统
  • Vue组件封装方案对比——v-if方式与内置component方式
  • python与excel第四节 批量新增、删除工作表
  • 计算机网络——计算机网络体系结构
  • 近期常用linux命令总结
  • 变配电站配电监控解决方案--变电站综合自动化系统
  • 【ollama】linux、window系统更改模型存放位置,全网首发2024!
  • Spring 被打暴了! vs Javalin vs Solon
  • IDEA中快速配置Git
  • vscode用SSH远程开发c语言
  • 鸿蒙Next 支持数据双向绑定的组件:Checkbox--Search--TextInput
  • 跨越时空的纽带:探索Facebook如何连接人与人
  • LabVIEW湍流等离子体束热效率优化
  • 21个 JVM 技术点详解(附面试解答)
  • mysql逗号分隔字段拆成行简述
  • 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载
  • golang 操作redis
  • macOS - 获取硬件设备信息
  • 突破编程_C++_STL教程( queue 的基础知识)
  • Hystrix 容错机制数据监控可视界面无法加载
  • 【Java】POI解析excel
  • AI浸入社交领域,泛娱乐APP如何抓住新风口?
  • 遥感图像地物分类流程
  • JS13-事件的绑定和事件对象Event
  • pycorrector检测OCR错字实践
  • RDD算子介绍(三)
  • Redis的脑裂问题
  • 【算法】雪花算法生成分布式 ID
  • FFplay使用滤镜添加字幕到现有视频显示
  • 【Python + Django】Django模板语法 + 请求和响应