【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.hqwc.cn/news/338544.html

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

相关文章

【笔记】书生·浦语大模型实战营——第三课(基于 InternLM 和 LangChain 搭建你的知识库)

【参考&#xff1a;tutorial/langchain at main InternLM/tutorial】 【参考&#xff1a;(3)基于 InternLM 和 LangChain 搭建你的知识库_哔哩哔哩_bilibili-【OpenMMLab】】 笔记 基础作业 这里需要等好几分钟才行 bug&#xff1a; 碰到pandas相关报错就卸载重装 输出文字…

【设计模式】创建型模式之单例模式(Golang实现)

定义 一个类只允许创建一个对象或实例&#xff0c;而且自行实例化并向整个系统提供该实例&#xff0c;这个类就是一个单例类&#xff0c;它提供全局访问的方法。这种设计模式叫单例设计模式&#xff0c;简称单例模式。 单例模式的要点&#xff1a; 某个类只能有一个实例必须…

研发日记,Matlab/Simulink避坑指南(一)——Data Store Memory模块执行时序Bug

文章目录 背景 问题 排查 解决 总结 背景 在一个嵌入式软件项目中&#xff0c;客户要求高度可控的时序流&#xff0c;我使用一个全局工步&#xff0c;对整个软件进行控制调度。由于子任务比较多&#xff0c;分门别类放在几个嵌套的子系统中&#xff0c;不能使用Goto模块引…

云流量回溯的工作原理及关键功能

云计算和网络技术的快速发展为企业提供了更灵活、高效的业务运营环境&#xff0c;同时也引发了一系列网络安全挑战。在这个背景下&#xff0c;云流量回溯成为网络安全领域的一个关键技术&#xff0c;为企业提供了对网络活动的深入洞察和实时响应的能力。 一、 云流量回溯的基本…

微信小程序的生命周期函数有哪些?

面试官&#xff1a;说说微信小程序的生命周期函数有哪些&#xff1f; 一、是什么 跟vue、react框架一样&#xff0c;微信小程序框架也存在生命周期&#xff0c;实质也是一堆会在特定时期执行的函数 小程序中&#xff0c;生命周期主要分成了三部分&#xff1a; 应用的生命周期…

python json模块

json是JavaScript对象表示法的缩写&#xff0c;是一种轻量级的数据交换格式&#xff0c;经常被用于Web应用程序中。python中的json库是用于解析和生成json数据格式的库。 import jsondata {"name": "张三","age": 18,"hobbies": [&q…

Serverless 开拓无服务器时代:云计算的新趋势(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

JS 函数

函数就是封装了一段可以被重复执行调用的代码块。目的&#xff1a;让大量代码重复利用 1、声明函数 方式一&#xff1a;利用函数关键字自定义函数&#xff08;命名函数&#xff09; function 函数名&#xff08;&#xff09;{//函数体代码} function是声明函数的关键字&#…

【集合大练习】---------------简易学生管理系统

目标&#xff1a; 实现学生对象新增&#xff0c;删除&#xff0c;查看&#xff0c;对象信息修改 整体实现思路&#xff1a; 1.定义学生类-------------创建学生对象 2.管理界面代码编写-------------命令提示面板 3.添加学生的代码编写---------add功能实现 4.查看学生信…

1.10号io网络

信号量&#xff08;信号灯集&#xff09; 1> 信号灯集主要完成进程间同步工作&#xff0c;将多个信号灯&#xff0c;放在一个信号灯集中&#xff0c;每个信号灯控制一个进程 2> 每个灯维护了一个value值&#xff0c;当value值等于0时&#xff0c;申请该资源的进程处于阻…

Ubuntu22.04,Nvidia4070配置llama2

大部分内容参考了这篇非常详细的博客&#xff0c;是我最近看到的为数不多的保姆级别的教学博客&#xff0c;建议大家去给博主点个赞【Ubuntu 20.04安装和深度学习环境搭建 4090显卡】_ubuntu20.04安装40系显卡驱动-CSDN博客 本篇主要是基于这篇博客结合自己配置的过程中一些注…

WEB 3D技术 three.js 光照与阴影

本文 我们来说 灯光与阴影 之前 我们有接触到光照类的知识 但是阴影应该都是第一次接触 那么 我们先来看光 首先是 AmbientLight 环境光 你在官网中搜索 AmbientLight 官方是就写明了 环境光是不会产生阴影的 因为 它没有反向 然后是 DirectionalLight 平行光 它是可以投射阴…