spring boot集成Elasticsearch 7.16.3

环境:Elasticsearch 版本 7.16.3

Elasticsearch for windows下载地址
windows
若依
spring boot版本 2.6.0

在这里插入图片描述

pom文件添加

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

自定义配置类

import org.apache.http.HttpHost;
import org.apache.http.client.config.RequestConfig;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;

@Configuration
public class ESConfig extends AbstractElasticsearchConfiguration {

    @Override
    public RestHighLevelClient elasticsearchClient() {
        // 设置连接超时和读取超时时间(单位:毫秒)
        int connectionTimeout = 60000; // 60 秒
        int readTimeout = 60000; // 60 秒

        // 创建 RequestConfig
        RequestConfig requestConfig = RequestConfig.custom()
                .setConnectTimeout(connectionTimeout)
                .setSocketTimeout(readTimeout)
                .build();

        // 创建 RestClientBuilder
        RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200))
                .setHttpClientConfigCallback(httpClientBuilder ->
                        httpClientBuilder.setDefaultRequestConfig(requestConfig));

        // 创建 RestHighLevelClient
        RestHighLevelClient client = new RestHighLevelClient(builder);

        return client;
    }
}

实体类

indexName = “zbinfo” //索引名

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;

@Document(indexName = "zbinfo",shards = 1,replicas = 0)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ESZbInfo {

    @Id
    @Field(type = FieldType.Keyword)
    private Long id;

    @Field(type = FieldType.Long)
    private Long nid;

    /** 标题 */
    @Field(type = FieldType.Text)
    private String title;

    @Field(type = FieldType.Text)
    private String content;
}

创建操作的Repository

import com.dataDemo.system.domain.ESZbInfo;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ESZbInfoRepstitory extends ElasticsearchRepository<ESZbInfo, String> {

}

操作CRUD

	@Autowired
    private ESZbInfoRepstitory esZbInfoRepstitory;
    
 	@Autowired
    private ElasticsearchOperations elasticsearchOperations;

//批量插入
public void insertEsZbInfo(){
        List<ZbInfoTxy> list= zbInfoTxyService.selectZbInfoTxyListLocal(new ZbInfoTxy());
        Integer count = 0;
        List<ESZbInfo> lists = new ArrayList<>();
        if(list.size() != 0){
            for(ZbInfoTxy zbInfoTxy:list){
                System.out.println("数量----"+count+"-----date---"+ DateUtils.getTime());
                ESZbInfo zbInfo = new ESZbInfo();
                zbInfo.setId(zbInfoTxy.getNid());
                zbInfo.setTitle(zbInfoTxy.getTitle());               
                zbInfo.setContent(zbInfoTxy.getContent());
                lists.add(zbInfo);
                count++;
            }
        }
        //批量插入方法
        esZbInfoRepstitory.saveAll(lists);
    }

//单个插入
 esZbInfoRepstitory.save(new ZbInfoTxy ());

	//删除
    public void deleteEsAll(){
        System.out.println("删除全部:");
        esZbInfoRepstitory.deleteAll();
    }

//查询 --根据关键词查询
    public void selectEsZbInfo(String title){
        System.out.println("根据关键词查询:");
        /**
         * //单条件模糊查询
         * NativeSearchQuery query = new NativeSearchQueryBuilder()
         *                 .withQuery(QueryBuilders.matchPhraseQuery("title", title))
         *                 .build();
         *
         * //多条件匹配查询
         *  NativeSearchQuery query = new NativeSearchQueryBuilder()
         *                 .withQuery(QueryBuilders.boolQuery()
         *                         .must(QueryBuilders.matchPhraseQuery("title", title))
         *                         .must(QueryBuilders.matchQuery("city", 98)))
         *                 .build();
         *
         * //检索一个字段在两个字段中出现过的
         * NativeSearchQuery query = new NativeSearchQueryBuilder()
         *         .withQuery(QueryBuilders.boolQuery()
         *                 .must(QueryBuilders.multiMatchQuery(title, "title", "content")))
         *         .build();
         */
        NativeSearchQuery query = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.boolQuery()
                        .must(QueryBuilders.matchPhraseQuery("title", title))
                        .must(QueryBuilders.matchQuery("city", 98)))
                .build();
        SearchHits<ESZbInfo> searchHits = elasticsearchOperations.search(query, ESZbInfo.class);
        List<ESZbInfo> list = searchHits.stream().map(SearchHit::getContent).collect(Collectors.toList());
        if(list.size() != 0){
            for(ESZbInfo esZbInfo:list){
                System.out.println(esZbInfo);
            }
        }
    }

//根据id查询
    public void selectEsById(String id){
        Optional<ESZbInfo> optionalById = this.esZbInfoRepstitory.findById(id);
        System.out.println("单个查询---"+optionalById);
    }

//查询es状态
http://localhost:9200/_cluster/health

//查询索引的zbinfo映射字段
http://localhost:9200/zbinfo/_mapping

如果插入es的数据量过大,可调整Elasticsearch 目录下/config/elasticsearch.yml 配置文件
添加 http.max_content_length: 200mb(可根据需求更改)
然后重启es

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

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

相关文章

细数Android开发者的艰辛历程,android零基础

首先我们来看一下组件化项目和传统项目的区别: 在传统的项目里 我们通常情况下会有一个commonLib的Libary模块和一个app的application模块&#xff0c;业务中的逻辑都写在app中各个功能模块放到不同的包下。这样做有以下几个主要的缺点&#xff1a; 1.无论分包做的再好&…

LLM@本地语言大模型@Gemma的安装与使用@dockerDesktop的安装和启动

文章目录 准备refsollama安装过程2b模型的效果小结&#x1f47a; ollama的进一步使用帮助文档查看ollama安装了哪些模型使用皮肤来使聊天更易用 使用Chatbot UI皮肤安装docker&#x1f47a;启动docker载入和退出dockerchatbot 网页版皮肤 使用命令行聊天小结&#x1f47a; 准备…

探索口袋中的远程控制神器

在这个科技日新月异的时代&#xff0c;我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机&#xff0c;你是否也有遇到过需要远程操作自己某一台手机的场景呢&#xff1f;今天&#xff0c;我要向大家推荐一款神奇的手机远程操作神器&#xff0c;让你可以随时随地…

tomcat安装步骤流程

安装tomcat是基于安装java的基础上的 JAVA 举例说明&#xff1a; 关闭防火墙 下载java [rootlocalhost ~]#yum install java -y rootlocalhost ~]#yum install epel-release.noarch -y [rootlocalhost ~]#yum provides */javac [rootlocalhost data]#yum install java-1.8.0-o…

Intel SGX 概述 --潦草笔记

文章目录 前言一、SGX介绍1.1 指令介绍1.2 数据结构 二、内存保护过程2.1 enclave页面缓存&#xff08;EPC&#xff09;2.2 Enclave页面缓存映射&#xff08;EPCM&#xff09; 三、部署SGX参考资料 前言 SGX是Intel开发的新的处理器技术&#xff0c;可以在计算平台上提供一个可…

Leetcode583. 两个字符串的删除操作 -代码随想录

题目&#xff1a; 代码(首刷自解 2024年2月29日&#xff09;&#xff1a; class Solution { public:// 动态规划 好像和找最长公共子序列一样&#xff1f;int minDistance(string word1, string word2) {int sz1 word1.size();int sz2 word2.size();// dp initvector<vec…

form 表单 转换为json-多种(通用/多维数组) 全方案

JSON 在 JavaScript 中重要&#xff0c;因其轻量、通用、易读&#xff0c;适用于数据交换、存储和传输。 为什么写这个文章&#xff0c;废话不多&#xff0c;直接近主题。 一、通用 一般采用jquery编写 var key $(#"cyberwin_form_card_newadd").serialize(); 结…

自动化测试摸索:python+selenium+pytest(持续更新.....)

一、环境搭建 1、python 安装 下载链接&#xff1a;Python Releases for Windows | Python.org 自己选择合适的版本下载 当下载完毕时&#xff0c;找到该安装程序&#xff1a;python-3.12.2-amd64.exe文件&#xff0c;双击启动安装向导。 为了防止C:盘文件因系统故障或者无…

C# 高阶语法 —— Winfrom链接SQL数据库的存储过程

存储过程在应用程序端的使用的优点 1 如果sql语句直接写在客户端&#xff0c;以一个字符串的形式体现的&#xff0c;提示不友好&#xff0c;会导致效率降低 2 sql语句写在客户端&#xff0c;可以利用sql注入进行攻击&#xff0c;为了安全性&#xff0c;可以把sql封装在…

H3C防火墙安全授权导入

一、防火墙授权概述 前面我们已经了解了一些防火墙的基本概念&#xff0c;有讲过防火墙除了一些基本功能&#xff0c;还有一些高级安全防护&#xff0c;但是这些功能需要另外独立授权&#xff0c;不影响基本使用。这里以H3C防火墙为例进行大概了解下。 正常情况下&#xff0c;防…

01-prometheus监控系统-安装部署prometheus

一、准备环境 主机名ip配置prometheus-server3110.0.0.311核1g-20GBprometheus-server3210.0.0.311核1g-20GBprometheus-server3310.0.0.311核1g-20GB 二、下载/上传软件包 1&#xff0c;软件包地址 这里给大家准备了百度云盘的安装包&#xff1b; 链接&#xff1a;https:/…

upload-Labs靶场“1-5”关通关教程

君衍. 一、环境搭建二、第一关 前端JS检测后缀1、源码分析2、禁用浏览器JS上传3、burp抓包修改 三、第二关 MIME头验证1、源码分析2、burp抓包绕过 四、第三关 PHP3绕过1、源码分析2、PHP3绕过 五、第四关 .htaccess重写绕过1、源码分析2、.htaccess复写 六、第五关 黑名单大小…

VPP学习之配置VXLAN隧道

VPP学习之配置VXLAN隧道 一、VXLAN技术 VXLAN&#xff08;Virtual eXtensible Local Area Network&#xff0c;虚拟扩展局域网&#xff09;&#xff0c;是由IETF定义的NVO3&#xff08;Network Virtualization over Layer 3&#xff09;标准技术之一&#xff0c;是对传统VLAN…

互动多媒体内容的魔法:如何让你的网页活起来

互动多媒体内容的魔法&#xff1a;如何让你的网页活起来 前言 在之前的文章中&#xff0c;我们探讨了网页结构中的基础介绍&#xff0c;本文将介绍如何通过简单的交互增强用户体验&#xff0c;包括图像大小的动态切换&#xff0c;以及音视频内容的播放控制来介绍网页多媒体的具…

测试:4核8G服务器并发数,支持多少人?

腾讯云4核8G服务器支持多少人在线访问&#xff1f;支持25人同时访问。实际上程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&#xff0c;假设公网带宽太小&#xff0c;流量直接卡在入口&#xff0c;4核8G配置的CPU内存也会造成计算…

出现 ‘vue‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件的解决方法(图文界面)

目录 前言1. 问题所示2. 原理分析3. 解决方法前言 由于Java转全栈,对此前端的细节点都比他人更加注意,所以此处记录更有用的信息!(小白都能看懂) 1. 问题所示 出现如下问题: F:\vue_project>vue -version vue 不是内部或外部命令,也不是可运行的程序 或批处理文件…

网关kong记录接口处理请求和响应插件 tcp-log-with-body的安装

tcp-log-with-body 介绍 Kong的tcp-log-with-body插件是一个高效的工具&#xff0c;它能够转发Kong处理的请求和响应。这个插件非常适用于需要详细记录API请求和响应信息的情景&#xff0c;尤其是在调试和排查问题时。 软件环境说明 kong version 2.1.4 - 2.8.3 [可用亲测]C…

Windows Docker 部署 Redis

部署 Redis 打开 Docker Desktop&#xff0c;切换到 Linux 内核。然后在 PowerShell 执行下面命令&#xff0c;即可启动一个 redis 服务 docker run -d --name redis -p 6379:6379 redis-如果需要自启动&#xff0c;加 --restart always 参数即可。 连接 Redis 使用客户端连…

数据中心GPU集群高性能组网技术分析

数据中心GPU集群组网技术是指将多个GPU设备连接在一起&#xff0c;形成一个高性能计算的集群系统。通过集群组网技术&#xff0c;可以实现多个GPU设备之间的协同计算&#xff0c;提供更大规模的计算能力&#xff0c;适用于需要大规模并行计算的应用场景。 常用的组网技术&…

【Python笔记-设计模式】状态模式

一、说明 状态模式是一种行为设计模式&#xff0c;用于解决对象在不同状态下具有不同行为 (一) 解决问题 在对象行为根据对象状态而改变时&#xff0c;规避使用大量的条件语句来判断对象的状态&#xff0c;提高系统可维护性 (二) 使用场景 当对象的行为取决于其状态&#…