袁庭新ES系列17节|Spring Data Elasticsearch基础

前言

为了简化对Elasticsearch的操作Spring Data提供了Spring Data Elasticsearch。Spring Data Elasticsearch是Spring Data技术对Elasticsearch原生API封装之后的产物,它通过对原生API的封装,使得程序员可以简单的对Elasticsearch进行各种操作。接下来就跟着袁老师一起来学习Spring Data Elasticsearch相关的知识。

一. Spring Data Elasticsearch概述

Spring Data Elasticsearch官方文档地址:Spring Data Elasticsearch。

1.简介

Spring Data for Elasticsearch是Spring Data项目的一部分,该项目旨在为新的数据存储提供一个熟悉且一致的基于Spring的编程模型,同时保留特定于存储的特性和功能。

Spring Data Elasticsearch项目提供了与Elasticsearch搜索引擎的集成。Spring Data Elasticsearch的关键功能领域是一个以POJO为中心的模型,用于与Elasticsearch文档交互,并轻松编写一个Repository风格的数据访问层。

2.特征

Spring Data for Elasticsearch的特性主要见下:

  • Spring配置支持使用基于Java的@Configuration类或ES客户端实例的XML命名空间。
  • ElasticsearchTemplate帮助类,它可以提高执行常见ES操作的效率。包括文档和POJO之间的集成对象映射。
  • 与Spring的转换服务集成的功能丰富的对象映射。
  • 基于注释的映射元数据,但可扩展以支持其他元数据格式。
  • 自动实现Repository接口,包括对自定义查找器方法的支持。
  • 对存储库的CDI支持。

二. Spring Data Elasticsearch配置

1.基本配置

1.我们在【es-client】项目的pom.xml文件中,引入Spring Data Elasticsearch的启动器。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

2.在resources目录下的application.yml文件中配置Elasticsearch的host和port信息。

spring:
  data:
    elasticsearch:
      cluster-name: yx-elastic
      cluster-nodes: 127.0.0.1:9301,127.0.0.1:9302,127.0.0.1:9303

需要注意的是,Spring Data Elasticsearch底层使用的不是Elasticsearch提供的RestHighLevelClient,而是TransportClient,并不采用HTTP协议通信,而是访问Elasticsearch对外开放的TCP端口。我们在之前集群配置中,设置的端口分别是:9301、9302、9303。

另外,Spring Boot已经帮我们配置好了各种SDE配置,并且注册了一个ElasticsearchTemplate供我们使用。接下来一起来试试吧。

3.在test测试文件夹下的com.yx.es包下创建一个SpringDataESTests测试类。通过@Autowired注解对ElasticsearchTemplate进行注入,测试对象是否可以获取到。

package com.yx.es;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringDataESTests {
    
    @Autowired
    private ElasticsearchTemplate template;

    @Test
    public void check() {
        System.err.println(template);
    }
}

4.运行check()方法,输出结果见下:

org.springframework.data.elasticsearch.core.ElasticsearchTemplate@64a7ad02

2.异常解析

如果运行check()方法报错,可能是以下问题所导致。

1.在pom.xml配置文件中,将Spring Boot的版本设置为2.1.6.RELEASE,进行降级处理。原因是安装的Elasticsearch是6.2.4版本,如果Spring Boot的版本过高可能不兼容。

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.1.6.RELEASE</version>
  <relativePath/>
</parent>

2.检查ElasticsearchTemplate类的导包是否是org.springframework.data.elasticsearch.core.ElasticsearchTemplate。高版本的SDE可能包结构有区别。

3.如果输出结果是"null",原因是低版本的Spring Boot测试类需要添加@RunWith(SpringRunner.class)注解进行修饰。

三. 索引库操作

1.创建索引库

创建索引库需要使用到的注解:

注解

描述

@Document

声明索引库配置。参数见下:indexName:索引库名称type:类型名称,默认是"docs"shards:分片数量,默认5replicas:副本数量,默认1

@Id

声明实体类的id

@Field

声明字段属性。参数见下:type:字段的数据类型analyzer:指定分词器类型index:是否创建索引

实际上,与我们自定义工具类类似,SDE也是通过实体类上的注解来配置索引库信息的。

1.我们在Product实体类上添加下面的一些注解。

package com.yx.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "yx", type = "product", shards = 3, replicas = 1)
public class Product {
    @Id
    private Long id; // 商品ID
    
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String title; // 标题
    
    @Field(type = FieldType.Keyword)
    private String category; // 分类
    
    @Field(type = FieldType.Keyword)
    private String brand; // 品牌
    
    @Field(type = FieldType.Double)
    private Double price; // 价格
    
    @Field(type = FieldType.Keyword, index = false)
    private String images; // 图片地址
}

2.在SpringDataESTests类中定义创建索引的createIndex()方法。

@Test
public void createIndex() {
    // 创建索引库,并制定实体类的字节码
    template.createIndex(Product.class);
}

2.创建映射

刚才的注解已经把映射关系也配置上了,所以创建映射只需要这样:

@Test
public void createMapping() {
	template.putMapping(Product.class);
}

四. 结语

跟着袁老师回顾一下这一章节我们学习的主要内容,首先我们对Spring Data Elasticsearch进行了简单介绍并概述了其特征;然后学习了Spring Data Elasticsearch的基本配置;最后介绍了通过Spring Data Elasticsearch如何操作Elasticsearch。关于Spring Data for Elasticsearch的基本使用就给大家介绍到这里。

今天的内容就分享到这里吧。关注「袁庭新」,干货天天都不断!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589097.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

InfluxDB安装使用介绍

1.介绍 InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成&#xff0c;着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据&#xff0c;IoT行业的实时数据等场景。 2.对常见关系型数据库&#xff08;MySQL&#xff09;的基础概念对比 1…

满上! —— 十年之约#22(ROI 48%)

原创 | 刘教链 空头在忍耐了很久之后&#xff0c;趁五一劳动节东方放假发动突袭&#xff0c;把BTC&#xff08;比特币&#xff09;打到6万刀以下。这使得我们终于终结了7个月七连涨的趋势&#xff0c;确定4月以收跌结束。 4月开盘70k&#xff0c;最高72.8k&#xff0c;最低59.6…

CPU卡园区码分析计算,根据卡号计算外部密码

生活中我们可能遇到这种情况&#xff0c;比如家里的门禁卡丢失了&#xff0c;拿着家里人的去街上 复制&#xff0c;结果对方说无法复制&#xff0c;因为这种卡是CPU卡的一种&#xff0c;必须知道园区码才可以成功复制&#xff0c;这个时候&#xff0c;我们就需要请出我们的战神…

uniapp实现点击事件跳转页面

首先定义一个点击事件 这里采用的vue3的写法&#xff0c;然后写上触发事件后要跳转的路径 function jump() {uni.switchTab({url:/pages/bangong/index})} 到这里就简单的实现uniapp的点击跳转页面了

开源农场管理软件

软件介绍 Tania是一款基于Go、Vue.JS和SQLite的开源农场日记软件。该项目始于2016年11月&#xff0c;由于无法找到适合自己需求的软件&#xff0c;开发团队决定自己搭建一套适合家庭后院花园的管理系统&#xff0c;并可以随时随地进行管理。 项目功能描述 Tania是一款免费且开源…

密码学基础练习五道 RSA、elgamal、elgamal数字签名、DSA数字签名、有限域(GF)上的四则运算

1.RSA #include <stdlib.h>#include <stdio.h>#include <string.h>#include <math.h>#include <time.h>#define PRIME_MAX 200 //生成素数范围#define EXPONENT_MAX 200 //生成指数e范围#define Element_Max 127 //加密单元的…

Java基础知识(三) -- 流程控制

不论哪种编程语言&#xff0c;都会提供两种基本的流程控制结构&#xff1a;分支结构和循环结构。其中分支结构用于实现根据条件来选择性地执行某段代码&#xff0c;循环结构则用于实现根据循环条件重复执行某段代码。 1. 顺序结构 任何编程语言中最常见的程序结构就是顺序结构…

van-cascader(vant2)异步加载的bug

问题描述&#xff1a;由于一次性返回所有的级联数据的话&#xff0c;数据量太大&#xff0c;接口响应时间太久&#xff0c;因此采用了异步加载的方案&#xff0c;看了vant的官方示例代码&#xff0c;照着改了下&#xff0c;很轻松地实现了功能。正当我感叹世界如此美好的时候&a…

结合创新!频域+时间序列,预测误差降低64.7%

频域时间序列不仅能提供更丰富的信息&#xff0c;还能提高模型性能和预测准确性。对于论文er来说&#xff0c;是个可发挥空间大、可挖掘创新点多的研究方向。 具体来说&#xff1a; 通过将复杂的时间序列数据转换成简单的频率成分&#xff0c;我们可以更容易地捕捉到数据的周期…

【SpringBoot整合系列】SpringBoot整合Redis[附redis工具类源码]

目录 SpringBoot整合Redis1.下载和安装Redis2.新建工程&#xff0c;导入依赖3.添加配置4.先来几个基本的示例测试代码输出结果用redis客户端查看一下存储内容 5.封装redis工具类RedisKeyUtilRedisStringUtilRedisHashUtilRedisListUtilRedisSetUtilRedisZsetUtil备注 6.测试通用…

nginx--第三方模块安装上传下载服务

第三方模块安装 准备 cd /usr/local/src/ yum install git -y git clone https://github.com/openresty/echo-nginx-module.git cd nginx-1.24.0 yum -y install perl-devel perl-ExtUtils-Embed zlib-devel gcc-c libtool openssl openssl-devel 编译安装 ./configure \--p…

Javascript:Web APIs(一)

Javascript基础&#xff08;一&#xff09; Javascript基础&#xff08;二&#xff09; Javascript基础&#xff08;三&#xff09; Javascript基础已经结束&#xff0c;接下来我们将进入到整个Web API学习中&#xff0c;在此&#xff0c;我们将学习DOM操作&#xff0c;基本的…

32.Docker认识

Docker介绍 Docker是一个快速交付应用&#xff0c;运行应用的技术。 1.可以将程序、依赖、运行环境一起打包为一个镜像&#xff0c;可以迁移到任意Linux操作系统。 2.运行时利用沙箱机制行程隔离容器&#xff0c;各个应用互不干扰。 3.启动、移除都可以通过一行命令完成&am…

多线程基础知识(全面):创建线程、线程状态如何变化、wait()、notify()、sleep()、停止线程

文章目录 一、创建线程的四种方式1.1 继承Thread类1.2 实现runnable接口1.3 实现Callable接口1.4 线程池创建线程1.5 补充&#xff1a;runnable、callable都可以创建线程&#xff0c;有什么区别&#xff1b;run()和 start()有什么区别 二、线程包括哪些状态、状态之间如何变化2…

40.WEB渗透测试-信息收集-域名、指纹收集(2)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;39.WEB渗透测试-信息收集-域名、指纹收集&#xff08;1&#xff09; oneforall的安装前置…

《深入解析Windows操作系统》第5章节学习笔记

1、每个Windows进程都是由一个执行体进程EPROCESS结构来表示的&#xff0c;EPROCESS和相关数据结构位于系统空间&#xff0c;但是进程环境控制块PEB是个例外&#xff0c;它位于进程空间地址中&#xff08;因为它包含了一些需要由用户模式代码来修改的信息&#xff09;。对于每一…

『跨端框架』Flutter环境搭建

『跨端框架』Flutter环境搭建 资源网站简介跨平台高性能发展历程跨平台框架的比较成功案例 环境搭建&#xff08;windows&#xff09;基础环境搭建Windows下的安卓环境搭建Mac下的安卓环境配置资源镜像JDKAndroid StudioFlutter SDK问题一问题二问题三修改项目中的Flutter版本 …

Java中的字符流

字符流字节流编码表 Java为什么可以区分字母和汉字 package day3; ​ import java.io.UnsupportedEncodingException; import java.lang.reflect.Array; import java.util.Arrays; ​ public class Test {public static void main(String[] args) throws UnsupportedEncoding…

【Mybatis 】什么是mybatis?如何在普通项目中使用?(超详细建议收藏)

文章目录 mybatis第一章1、什么是mybatis2、idea中配置环境3、创建一个普通工程 第二章1、mybatis基本步骤2、导入log4j日志3、使用lombok注解4、mapper.xml文件详情1、parameterType属性2、resultType属性 5、对实体包进行扫描6、SQL语句中的占位符及转义符7、接口方法包含多个…

Flutter笔记:Widgets Easier组件库(5)使用加减器

Flutter笔记 Widgets Easier组件库&#xff08;5&#xff09;&#xff1a;使用加减器 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress…