【elastic search】JAVA操作elastic search

目录

1.环境准备

2.ES JAVA API

3.Spring Boot操作ES


1.环境准备

本文是作者ES系列的第三篇文章,关于ES的核心概念移步:

https://bugman.blog.csdn.net/article/details/135342256?spm=1001.2014.3001.5502

关于ES的下载安装教程以及基本使用,移步:

https://bugman.blog.csdn.net/article/details/135342256?spm=1001.2014.3001.5502

在前文中,我们已经搭建好了一个es+kibana的基础环境,本文将继续使用该环境,演示JAVA操作es。

2.ES JAVA API

Elasticsearch Rest High Level Client 是 Elasticsearch 官方提供的一个 Java 客户端库,用于与 Elasticsearch 进行交互。这个客户端库是基于 REST 风格的 HTTP 协议,与 Elasticsearch 进行通信,提供了更高级别的抽象,使得开发者可以更方便地使用 Java 代码与 Elasticsearch 进行交互。

依赖:

<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.17.3</version>
</dependency>
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.3</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.10.0</version>
</dependency>
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version>
</dependency>
<dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.45</version>
</dependency>

其实Rest High Level Client的使用逻辑一共就分散步:

  1. 拼json
  2. 创建request
  3. client执行request

创建client:

RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.0.1",9200,"http")));

创建索引:

@Testpublic void createIndex() throws IOException {//1.拼json//settingsSettings.Builder settings = Settings.builder().put("number_of_shards", 3).put("number_of_replicas", 1);//mappingsXContentBuilder mappings = JsonXContent.contentBuilder().startObject().startObject("properties").startObject("name").field("type", "text").endObject().startObject("age").field("type", "integer").endObject().endObject().endObject();//2.创建requestCreateIndexRequest createIndexRequest = new CreateIndexRequest("person").settings(settings).mapping(mappings);//3.client执行requestrestHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);}

创建文档:

@Testpublic void createDoc() throws IOException {Person person=new Person("1","zou",20);JSONObject json = JSONObject.from(person);System.out.println(json);IndexRequest request=new IndexRequest("person",null,person.getId().toString());request.source(json, XContentType.JSON);IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);System.out.println(response);}

响应结果:

修改文档:

@Testpublic void updateDoc() throws IOException {HashMap<String, Object> doc = new HashMap();doc.put("name","张三");String docId="1";UpdateRequest request=new UpdateRequest("person",null,docId);UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);System.out.println(response.getResult().toString());}

删除文档:

@Testpublic void deleteDoc() throws IOException {DeleteRequest request=new DeleteRequest("person",null,"1");DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);System.out.println(response.getResult().toString());}

响应结果:

搜索示例:

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;import java.io.IOException;public class ElasticsearchSearchExample {public static void main(String[] args) {// 创建 RestHighLevelClient 实例,连接到 Elasticsearch 集群RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 构建搜索请求SearchRequest searchRequest = new SearchRequest("your_index"); // 替换为实际的索引名称// 构建查询条件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();searchSourceBuilder.query(QueryBuilders.matchAllQuery()); // 查询所有文档// 设置一些可选参数searchSourceBuilder.from(0); // 设置起始索引,默认为0searchSourceBuilder.size(10); // 设置返回结果的数量,默认为10searchSourceBuilder.timeout(new TimeValue(5000)); // 设置超时时间,默认为1分钟// 将查询条件设置到搜索请求中searchRequest.source(searchSourceBuilder);try {// 执行搜索请求SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);// 处理搜索响应System.out.println("Search took: " + searchResponse.getTook());// 获取搜索结果SearchHits hits = searchResponse.getHits();System.out.println("Total hits: " + hits.getTotalHits().value);// 遍历搜索结果for (SearchHit hit : hits.getHits()) {System.out.println("Document ID: " + hit.getId());System.out.println("Source: " + hit.getSourceAsString());}} catch (IOException e) {// 处理异常e.printStackTrace();} finally {try {// 关闭客户端连接client.close();} catch (IOException e) {// 处理关闭连接异常e.printStackTrace();}}}
}

请注意,上述示例中的 your_index 应该替换为你实际的 Elasticsearch 索引名称。这个示例使用了简单的 matchAllQuery,你可以根据实际需求构建更复杂的查询条件。在搜索响应中,你可以获取到搜索的结果以及相关的元数据。

3.Spring Boot操作ES

在 Spring Boot 中操作 Elasticsearch 通常使用 Spring Data Elasticsearch,以标准的JPA的模式来操作ES。

依赖:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.6.x</version> <!-- 选择一个与Elasticsearch 7.17.3兼容的Spring Boot版本 -->
</parent>

<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Data Elasticsearch -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

    <!-- Spring Boot Starter Test (for testing) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
application.properties配置:

spring.data.elasticsearch.cluster-nodes=localhost:9200

实体类:

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;import java.util.Date;@Document(indexName = "blogpost_index")
public class BlogPost {@Idprivate String id;@Field(type = FieldType.Text)private String title;@Field(type = FieldType.Text)private String content;@Field(type = FieldType.Keyword)private String author;@Field(type = FieldType.Date)private Date publishDate;// 构造函数、getter和setterpublic BlogPost() {}public BlogPost(String id, String title, String content, String author, Date publishDate) {this.id = id;this.title = title;this.content = content;this.author = author;this.publishDate = publishDate;}// 省略 getter 和 setter 方法
}

dao层:

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;public interface BlogPostRepository extends ElasticsearchRepository<BlogPost, String> {// 你可以在这里定义自定义查询方法}

service层:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Optional;@Service
public class BlogPostService {private final BlogPostRepository blogPostRepository;@Autowiredpublic BlogPostService(BlogPostRepository blogPostRepository) {this.blogPostRepository = blogPostRepository;}public BlogPost save(BlogPost blogPost) {return blogPostRepository.save(blogPost);}public Optional<BlogPost> findById(String id) {return blogPostRepository.findById(id);}public List<BlogPost> findAll() {return (List<BlogPost>) blogPostRepository.findAll();}public void deleteById(String id) {blogPostRepository.deleteById(id);}}


 

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

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

相关文章

节省时间:AI 模型靠谱下载方案汇总

这篇文章&#xff0c;想分享下我日常是如何下载模型的&#xff0c;包括下载来源和工具使用细节&#xff0c;希望对折腾模型的你也有帮助。 也希望开源和 AI 领域的研究者、从业者在做技术调研和落地实践的时候&#xff0c;都能节约一些时间。 写在前面 之前写了很多模型相关…

微信小程序:发送小程序订阅消息

文档&#xff1a;小程序订阅消息&#xff08;用户通过弹窗订阅&#xff09;开发指南 目录 步骤一&#xff1a;获取模板 ID步骤二&#xff1a;小程序端获取参数2.1、获取消息下发权限2.2、获取登录凭证&#xff08;code&#xff09; 步骤三&#xff1a;后端调用接口下发订阅消息…

【Web】CTFSHOW PHP命令执行刷题记录(全)

目录 web29 web30 web31 web32 web33 web34 web35 web36 web37-39 web40 web41 &#xff08;y4✌脚本&#xff09; web42 -44 web45 web46 -49 web50 web51 web52 web53 web54 web55-56 web57 web58 web59 web60 web61 web62 web63-65 web66-67 w…

QT 信号与槽

.h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();public slots:void buttonLable();priv…

rke2 Online Deploy Rancher v2.8.0 latest (helm 在线部署 rancher v2.8.0)

文章目录 1. 简介2. 预备条件3. 安装 helm4. 安装 cert-manager4.1 yaml 安装4.2 helm 安装 5. 安装 rancher6. 验证7. 界面预览 1. 简介 Rancher 是一个 Kubernetes 管理工具&#xff0c;让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托…

文档扫描与矫正-仿射变换

图像变换是计算机视觉和图像处理中的关键技术之一&#xff0c;它允许我们对图像进行各种形式的变形、调整和校正。其中&#xff0c;仿射变换是一种常见的变换方式。 在文档扫描过程中&#xff0c;由于拍摄角度和畸变等原因&#xff0c;文档图像可能存在一定程度的形变。仿射变…

【LeetCode】组合两个表(mysql)

题目 编写解决方案&#xff0c;报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中&#xff0c;则报告为 null 。 以 任意顺序 返回结果表。 结果格式如下所示。 答 select firstName ,lastName,city,state from Person left join Address …

软路由之爱快基于L2TP 实现

申明&#xff1a;本文仅针对国内SSTP&#xff0c;适用于国内的游戏加速&#xff0c;禁止一切利用该技术的翻墙行为。 相信很多接触过爱快的人都需要连接L2TP或PPTP&#xff0c;本文主要介绍通过爱快iKuai的L2TP 来实现异地组网。 一、准备工作 1、爱快 v3.x 2个&#xff08;免…

SpringMVC源码解析——HTTP请求处理

在SpringMVC源码解析——DispatcherServlet的逻辑处理中&#xff0c;最后介绍到了org.springframework.web.servlet.DispatcherServlet的doDispatch方法中关于处理Web HTTP请求的核心代码是调用AbstractHandlerMethodAdapter类的handle方法&#xff0c;源码如下&#xff1a; /*…

作业:通过两台linux主机配置ssh实现互相免密登陆

做题步骤&#xff1a; 一.开启两个Linux主机&#xff0c;并且用ssh连接&#xff0c;要能够ping通 我这里是server&#xff1a;192.168.81.129 client&#xff1a;192.168.81.130 举例 步骤&#xff1a; 1.安装服务软件 2.运行软件程序 3.根据自定配置提供对应的服务/etc/chr…

期末查分系统(c,链表实现)

主要功能&#xff1a; 分为三个身份: 学生:可以通过学号查询个人分数 老师&#xff1a;可以看所有学生成绩&#xff0c;单科排名&#xff08;正序&#xff0c;倒序&#xff09;&#xff0c;统计绩点&#xff0c;查看绩点排名前百分之n的学生 管理员端&#xff1a;可以创建链…

用React给XXL-JOB开发一个新皮肤(二):目录规划和路由初始化

目录 一. 简述二. 目录规划三. Vite 配置 3.1. 配置路径别名3.2. 配置 less 四. 页面 4.1. 入口文件4.2. 骨架文件4.3. 普通页面 五. 路由配置六. 预览启动 一. 简述 上一篇文章我们介绍了项目初始化&#xff0c;此篇文章我们会先介绍下当前项目的目录规划&#xff0c;接着对…

Magics 教程

文章目录 基本流程基本操作页面的介绍基本操作 基本流程 基本操作 页面的介绍 右侧是工具页&#xff0c;可以直接进行调整&#xff0c;也可以在选项&帮助->自定义用户界面 那里进行相关的调整 基本操作 直接拖动鼠标左键&#xff1a;选中物体鼠标右键&#xff1a; 长按…

JVM工作原理与实战(十二):打破双亲委派机制-自定义类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、打破双亲委派机制的方法 二、自定义类加载器 1.Tomcat自定义类加载器案例 2.自定义类加载器详解 3.案例解析 总结 前言 JVM作为Java程序的运行环境&#xff0c;其负责解释和执…

RAG:让大语言模型拥有特定的专属知识

作为一个在Chatbot领域摸爬滚打了7年的从业者&#xff0c;笔者可以诚实地说&#xff0c;在大语言模型的推动下&#xff0c;检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;技术正在快速崛起。 RAG的搜索请求和生成式AI技术&#xff0c;为搜…

【教学类-45-06】正确 X-Y之间的三连加减题混合 (竖向排列)(44格:11题“++ ”11题“--”11题“ +-”11题“ -+” )

作品展示&#xff1a; 背景需求&#xff1a; 把以下四款3连题 混在一起&#xff0c;每种题目随机抽取11题&#xff0c;一共44格 出现问题&#xff1a; 1、- 、-里面有重复题 2、升序排列最好竖排展示 素材准备: ​ ​ 问题改正 1、单元格修改&#xff1a;确保竖列写入 …

【Docker项目实战】使用Docker部署nullboard任务管理工具

【Docker项目实战】使用Docker部署nullboard任务管理工具 一、nullboard介绍1.1 nullboard简介1.2 任务看板工具介绍 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 注意事项 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四…

C# WPF 数据绑定

需求 后台变量发生改变,前端对应的相关属性值也发生改变 实现 接口 INotifyPropertyChanged 用于通知客户端(通常绑定客户端)属性值已更改。 示例 示例一 官方示例代码如下 using System; using System.Collections.Generic; using System.ComponentModel; using Sys…

spring boot + mybatis + websocket + js实战

项目技术&#xff1a;spring boot mybatis websocket js 需求背景&#xff1a;当添加一个女孩时&#xff0c;页面的socket收到消息&#xff0c;打印最新的所有女生list&#xff0c;这样可以进一步在react/vue前端框架下&#xff0c;实现当A用户新增了某业务数据后&#xff…

迅为RK3568开发板Android11/12/Linux编译驱动到内核

在平时的驱动开发中&#xff0c;经常需要在内核中配置某种功能&#xff0c;为了方便大家开发和学习&#xff0c;本小 节讲解如何在内核中添加驱动。具体的讲解原理讲解请参考本手册的驱动教程。 Android11 源码如果想要修改内核&#xff0c;可以运行以下命令进行修改: cd ke…