elasticsearch数据存储结构,springboot集成elasticsearch

news2024/11/30 14:53:57

一、数据存储结构

在这里插入图片描述
结合数据库的结构理解起来就会比较清楚:
1)索引(Index)=>数据库(Database)。
2)类型(Type)=>表(Table)。
3)文档(Document)=>表中的一行记录(Row)。
4)属性(Field)=>字段列(Column)。

  1. 索引索引是含义相同的属性文档的集合,是Elasticsearch的一个逻辑存储,可以理解为关系型数据库中的数据库。
  2. 类型文档可以分组,比如员工信息。这种分组就叫类型,它是虚拟的逻辑分组,用来过滤文档数据。
  3. 文档文档是可以被索引的基本数据单位,存储在Elasticsearch中的主要实体叫文档,可以理解为关系型数据库中表的一行记录。

二、springboot集成elasticsearch

1.安装elasticsearch
ES的安装环境最好是类Linux操作系统,本书中使用mac。从ES 7.x版本开始,其发行的安装包中就已经内置了JDK。如果用户对JDK有独特的要求,可以修改其启动脚本进行依赖配置。为简单起见,本节安装ES时使用内置的JDK。
brew安装jdk8
安装brew包管理工具,就可以直接命令安装es
es安装步骤、这个我失败了,我用下面的步骤成功
es安装步骤
es启动失败,指定es启动jdk版本
https://www.cnblogs.com/blogxiao/p/16900204.html
上面的博客我都安装失败了
我安装成功用的这个方法
启动后无法访问
在这里插入图片描述Linux系统安装,参考这本书
在这里插入图片描述
2.引入依赖

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

在这里插入图片描述3.配置连接地址
在这里插入图片描述

spring.elasticsearch.rest.uris=http://127.0.0.1:9200

4.创建文档对象
创建实体对象类Book,然后使用@Document注解定义文档对象,示例代码如下:

package com.yangjunbo.JPADemo.pojo;

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;

@Document( indexName = "book" , replicas = 0)
public class Book {
    @Id
    private Long id;
    @Field(analyzer = "ik_max_word",type = FieldType.Text)
    private String bookName;
    @Field(type = FieldType.Keyword)
    private String author;
    private float price;
    private int page;
    @Field(type = FieldType.Keyword, fielddata = true)
    private String category;

    // 省略get、set方法


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getBookName() {
        return bookName;
    }

    public void setBookName(String bookName) {
        this.bookName = bookName;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public float getPrice() {
        return price;
    }

    public void setPrice(float price) {
        this.price = price;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public Book(){

    }
    public Book(Long id,String bookName, String author,float price,int page,String category) {
        this.id = id;
        this.bookName = bookName;
        this.author = author;
        this.price = price;
        this.page = page;
        this.category = category;
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder( "{\"Book\":{" );
        sb.append( "\"id\":" )
                .append( id );
        sb.append( ",\"bookName\":\"" )
                .append( bookName ).append( '\"' );
        sb.append( ",\"page\":\"" )
                .append( page ).append( '\"' );
        sb.append( ",\"price\":\"" )
                .append( price ).append( '\"' );
        sb.append( ",\"category\":\"" )
                .append( category ).append( '\"' );
        sb.append( ",\"author\":\"" )
                .append( author ).append( '\"' );
        sb.append( "}}" );
        return sb.toString();
    }
}

在这里插入图片描述

5.创建操作的repository

package com.yangjunbo.JPADemo.repository;

import com.yangjunbo.JPADemo.pojo.Book;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

import java.util.List;

public interface BookRepository extends ElasticsearchRepository<Book, Integer> {
    List<Book> findByBookNameLike(String bookName);
}

在这里插入图片描述

通过上面的示例代码,我们发现其使用方式和JPA的语法是一样的。

6.创建测试方法测试

package com.yangjunbo.JPADemo;

import com.yangjunbo.JPADemo.pojo.Book;
import com.yangjunbo.JPADemo.repository.BookRepository;
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.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestSave {

    @Autowired
    private BookRepository repository;

    @Test
    public void testSave() {
        Book book = new Book();
        book.setId((long) 1);
        book.setBookName("西游记");
        book.setAuthor("吴承恩");
        repository.save(book);
        Book newbook=repository.findById(1).orElse(null);
        System.out.println(newbook);
    }
}

在这里插入图片描述在这里插入图片描述结果表明索引数据保存成功,并且通过id能查询到保存的索引数据信息,说明在Spring Boot中成功集成Elasticsearch。

7.遇到的问题
当使用springboot和es版本不匹配就会报下面的错
Unable to parse response body for Response{requestLine=PUT /book/_doc/1?timeout=1m HTTP/1.1, host=http://127.0.0.1:9200, response=HTTP/1.1 201 Created}
springboot和elasticsearch的版本
如果启动7点几版本的es失败,提示jdk不清楚开发者,请注意下图的地方点击仍要打开。
在这里插入图片描述
参考书籍《springboot从入门到实战-章为忠著》

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 20.04.05安装PCL-1.12.0

1、安装QT-5.9.9 链接: Ubuntu20.04安装、配置、使用、卸载QT5.9.9以及第一个编写QT程序. 或者 链接: 在ubuntu用命令安装和卸载qt4、qt5(亲测有效). 2、安装VTK-7.1.1PCL-1.12.0 链接: ubuntu20.04下安装pcl. 或者 链接: PCL1.12VTK7.1.1 && Ubuntu20.04.3VSCode(官…

Python一炮句搞定网页登录验证码自动输入

前言&#xff1a;本来是“账号密码”的登录方式&#xff0c;突然就增加了验证码输入&#xff0c;还30秒一变。 查看元素 链接为一个png图片文件&#xff0c;每半分钟一更新&#xff0c;意思就是慢了还不行。 思路&#xff1a;&#xff2f;&#xff23;&#xff32;识别图片中的…

【并发】Java并发线程池底层原理详解与源码分析(下)

【并发】Java并发线程池底层原理详解与源码分析&#xff08;下&#xff09; 前情回顾 上篇文章地址 【并发】Java并发线程池底层原理详解与源码分析&#xff08;上&#xff09;_面向鸿蒙编程的博客-CSDN博客线程池不允许使用 Executors 去创建&#xff0c;而是通过 ThreadPo…

浅析数据迁移工具Sqoop

title: Sqoop系列 第一章 Sqoop理论 1.1 概述 sqoop 是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。 导入&#xff08;Import&#xff09;数据&#xff1a;MySQL&#xff0c;Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统 导出&…

八、Gateway

文章目录一、Gateway网关1.网关的作用二、配置网关1.创建gateway模块2.引入依赖3.编写application.yml4.启动gateway模块&#xff0c;查看是否能访问user-service服务三、路由断言工厂Route Predicate Factory四、GatewayFilter&#xff08;过滤器&#xff09;1.添加过滤器方式…

IDEA2022用maven创建的Servlet项目

因为博主太菜太笨&#xff0c;总是记不住大佬教的步骤&#xff0c;写一篇博客记录一下。 有什么不对&#xff0c;或者疑惑可以请假这位大佬&#xff08;没错就是那个被我问烦的大佬&#xff09;ljj大佬 第一步&#xff1a;新建maven 新建Project 选择webapp 初始界面需要等待…

S32K144之ADC

一&#xff0c;S32K144的ADC介绍 1&#xff0c;ADC模块特性 S32K14x和S32K14xW包含两个12位ADC模块&#xff0c;ADC0和ADC1。 S32K11x包含一个12位的ADC模块&#xff0c;ADC0。 不同封装&#xff0c;ADC0和ADC1所包含的通道数不一样&#xff0c;LQFP100来说ADC0和ADC1分别有16…

Spark - RDD 算子介绍及使用 Scala、Java、Python 三种语言演示

一、RDD 的起源 在 RDD 出现之前, 当时 MapReduce 是比较主流的, 而 MapReduce 如何执行流程如下&#xff1a; 多个 MapReduce 任务之间只能通过磁盘来进行传递数据&#xff0c;很明显的效率低下&#xff0c;再来看 RDD 的处理方式&#xff1a; 整个过程是共享内存的, 而不需…

利用pycharm调试ssh远程程序,并实时同步文件

或许你的服务器由于设置问题&#xff0c;不能通过Vscode进行远程调试python程序&#xff0c;那么本篇文章提供了利用pycharm远程调试程序的方法&#xff0c;且使用的编译器可以是服务器中的虚拟环境的编译器&#xff0c;可以实时同步本地与服务器的文件内容。希望对你能够有所帮…

【Oracle系列1】Oracle 的connect权限和create session的区别

【Oracle系列1】Oracle 的connect权限和create session的区别 背景 oracle数据库新建用户之后是无法登录的&#xff0c;需要赋予connect角色或者create session权限。 注意&#xff1a; connect是角色不是权限&#xff0c;create session是权限不是角色。角色是权限的集合。…

c++中的结构体

结构体&#xff1a;属于用户自定义的数据类型&#xff0c;允许用户存储不同的数据类型 语法&#xff1a;struct 结构体名 {结构体成员列表}&#xff1b;通过结构体创建变量的三种方式&#xff1a;1、struct 结构体名 变量名2、struct 结构体名 变量名{成员1值&#xff0c;成员…

第一个Shader程序

shader 很复杂&#xff0c;我学习的过程中也确实感受到了&#xff0c;需要会数学、图形学、编程语法等等知识。不如让我们直接看看 Shader 到底是什么&#xff1f;直接应用起来。或许没有那么复杂。 1、在场景中新建一个正方体&#xff0c;如下图 2、在 project 面板下新建一…

超级棒,使用 LIME 和 SHAP 可轻松解释机器学习模型的预测

在本文中&#xff0c;我将介绍两个可以帮助了解模型的决策过程的模型 LIME 和 SHAP。 作为数据科学家或机器学习从业者&#xff0c;将可解释性集成到机器学习模型中可以帮助决策者和其他利益相关者有更多的可见性并可以让他们理解模型输出决策的解释。 文章目录技术提升模型SH…

day02 redis

day02 Redis 第一章 Redis持久化机制 Redis的高性能是由于其将所有数据都存储在了内存中&#xff0c;为了使Redis在重启之后仍能保证数据不丢失&#xff0c;需要将数据从内存中同步到硬盘(文件)中&#xff0c;这一过程就是持久化。Redis 提供了一系列不同的持久化选项&#x…

MyBatis框架入门(含实例)

目录 1.MyBatis简介 2.ORM框架 3.数据持久化 4.Mybatis入门实战案例 4.1 下载mybatis的jar包 4.2 将jar包导入工程中 4.3 配置Mybatis的核心配置文件 4.3.1 MyBatis核心文件模板(mybatis-config) 4.3.2 mybatis-config模板的设置 4.4 创建User 实体类 4.5定义DAO层M…

11.25学到的东西==命令行

创建文件&#xff0c;可以直接选择文件之后再加上.py import argparse# 单个参数 # 创建解析器 # ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。 parser argparse.ArgumentParser() # 单独的参数 square 之后这个help就是提示的信息 # 显示给定数字…

【药材识别】基于matlab GUI SVM色差色温判断药材炮制程度系统【含Matlab源码 2241期】

⛄一、SVM色差色温判断药材炮制程度系统简介 本课题来源于"十二五"国家科技支撑计划项目(2012BAI29B11).颜色是中药质量标准中性状评价极为重要的内容,但传统的中药颜色检测大多依靠人的感官评估,人对颜色的辨别是一个非常复杂的过程,受到光学,视觉生理,视觉心理等诸…

JDBC操作数据库实现增、删、查、改

0.JDBC概念 实际开发中,手动的输入SQL语句是少之又少,大多数情况下是通过编译代码进行来控制自动执行. 具体操作如下: 上述展示有一个【自己写的Mysql客户端】&#xff0c;这种操作是非常容易的&#xff0c;因为各种数据库本身就提供一系列的API&#xff0c;可以让用户很方便…

wordpress 安装主题显示要配置FTP的解决办法

目录 问题复现 1、在安装插件的时候会弹出一个窗口 2、输入相关信息后显示失败 问题解决方法 1、查看wordpress文件权限 2、修改wordpress文件权限 3、插件安装完后&#xff0c;将权限改回 场景&#xff1a;基于Linux 的 wordpress 安装主题显示要配置FTP 安装插件或者主…

RegExp 对象

文章目录RegExp 对象创建RegExp对象正则表达式语法RegExp 对象方法支持正则表达式的 String 对象的方法RegExp.prototype[search]()replace() 方法match()常用正则表达式RegExp 对象 RegExp对象表示正则表达式&#xff0c;是由普通字符和特殊字符(也叫元字符或限定符)组成的文…