首页 > 编程语言 >Java API操作ES

Java API操作ES

时间:2024-04-02 21:00:43浏览次数:24  
标签:Java new client API elasticsearch import org public ES

1、项目搭建

Elasticsearch 软件是由 Java 语言开发的,所以也可以通过 Java API 的方式对 Elasticsearch服务进行访问。

先 IDEA 开发工具中创建简单的 java se Maven 项目(模块也可),如下:

修改 pom 文件,增加 Maven 依赖关系如下:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch</artifactId>
      <version>7.8.0</version>
    </dependency>
    <!-- elasticsearch 的客户端 -->
    <dependency>
      <groupId>org.elasticsearch.client</groupId>
      <artifactId>elasticsearch-rest-high-level-client</artifactId>
      <version>7.8.0</version>
    </dependency>
<!-- elasticsearch 依赖 2.x 的 log4j --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.9</version> </dependency> </dependencies>

 

2、Elasticsearch 客户端对象

代码如下:

import java.io.IOException;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

public class HelloElasticsearch {

    public static void main(String[] args) throws IOException {
        // 创建客户端对象
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("127.0.0.1", 9200, "http")));
//        ...
        System.out.println("ES客户端对象:" + client);

        // 关闭客户端连接
        client.close();
    }
}

响应如下:

 

3、索引操作

3.1、创建索引

package org.example;

import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

import java.io.IOException;

public class CreateIndex {

    public static void main(String[] args) throws IOException {
        // 创建客户端对象
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        // 创建索引 - 请求对象
        CreateIndexRequest request = new CreateIndexRequest("user2");
        // 发送请求,获取响应
        CreateIndexResponse response = client.indices().create(request,
                RequestOptions.DEFAULT);
        boolean acknowledged = response.isAcknowledged();
        // 响应状态
        System.out.println("操作状态 = " + acknowledged);

        // 关闭客户端连接
        client.close();
    }

}

响应如下:

 再次查看索引可以看到已新建了该索引。

 

3.2、查询索引

import org.apache.http.HttpHost;

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;

import java.io.IOException;

public class SearchIndex {
    public static void main(String[] args) throws IOException {
        // 创建客户端对象
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        // 查询索引 - 请求对象
        GetIndexRequest request = new GetIndexRequest("user2");
        // 发送请求,获取响应
        GetIndexResponse response = client.indices().get(request,
                RequestOptions.DEFAULT);
        
        System.out.println("aliases:"+response.getAliases());
        System.out.println("mappings:"+response.getMappings());
        System.out.println("settings:"+response.getSettings());

        client.close();
    }
}

响应如下:

 

3.3、删除索引

import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

import java.io.IOException;

public class DeleteIndex {
    public static void main(String[] args) throws IOException {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));
        // 删除索引 - 请求对象
        DeleteIndexRequest request = new DeleteIndexRequest("user2");
        // 发送请求,获取响应
        AcknowledgedResponse response = client.indices().delete(request,RequestOptions.DEFAULT);
        // 操作结果
        System.out.println("操作结果 : " + response.isAcknowledged());
        client.close();
    }
}

响应如下:

 

4、文档操作

由于频繁使用连接 Elasticsearch 和关闭它的代码,于是先对它进行重构。

package org.util;

import org.elasticsearch.client.RestHighLevelClient;

public interface ElasticsearchTask {
    void doSomething(RestHighLevelClient client) throws Exception;
}
package org.util;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

public class ConnectElasticsearch{

    public static void connect(ElasticsearchTask task){
        // 创建客户端对象
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));
        try {
            task.doSomething(client);
            // 关闭客户端连接
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

4.1、新增文档

先创建一个实体类,如下:

package org.entity;

public class User {
    private String name; private Integer age; private String sex;

    public String getName() { return name; }
    public void setName(String name){ this.name = name; }
    public Integer getAge() {  return age; }
    public void setAge(Integer age) { this.age = age; }
    public String getSex() { return sex; }
    public void setSex(String sex) { this.sex = sex; }
}

新增文档:

package org.example;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.xcontent.XContentType;
import org.entity.User;
import org.util.ConnectElasticsearch;

public class InsertDoc {

    public static void main(String[] args) {
        ConnectElasticsearch.connect(client -> {
            // 新增文档 - 请求对象
            IndexRequest request = new IndexRequest();
            // 设置索引及唯一性标识
            request.index("user").id("1001");

            // 创建数据对象
            User user = new User();
            user.setName("zhangsan");
            user.setAge(30);
            user.setSex("男");

            ObjectMapper objectMapper = new ObjectMapper();
            String productJson = objectMapper.writeValueAsString(user);
            // 添加文档数据,数据格式为 JSON 格式
            request.source(productJson, XContentType.JSON);
            // 客户端发送请求,获取响应对象
            IndexResponse response = client.index(request, RequestOptions.DEFAULT);
            //3.打印结果信息
            System.out.println("_index:" + response.getIndex());
            System.out.println("_id:" + response.getId());
            System.out.println("_result:" + response.getResult());
        });
    }
}

输出如下:

通过查询文档也可以查看到已经成功创建该文档。

 

4.2、修改文档

下面修改文档字段值:

import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.xcontent.XContentType;
import org.util.ConnectElasticsearch;

public class UpdateDoc {

    public static void main(String[] args) {
        ConnectElasticsearch.connect(client -> {
            // 修改文档 - 请求对象
            UpdateRequest request = new UpdateRequest();
            // 配置修改参数
            request.index("user").id("1001");
            // 设置请求体,对数据进行修改
            request.doc(XContentType.JSON, "sex", "女");
            // 客户端发送请求,获取响应对象
            UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
            System.out.println("_index:" + response.getIndex());
            System.out.println("_id:" + response.getId());
            System.out.println("_result:" + response.getResult());
        });
    }

}

输出如下:

 

4.3、查询文档

 

4.4、删除文档

 

标签:Java,new,client,API,elasticsearch,import,org,public,ES
From: https://www.cnblogs.com/wenxuehai/p/18111492

相关文章

  • Llama-recipes Quick start 的调试
    先给出Llama-recipes项目的链接LLaMa环境配置condacreate-nLLamapython=3.10#建立虚拟环境condaactivateLLama#激活虚拟环境按照LLamarecipy安装包cd你的llamarecipy的存放位置pipinstall--extra-index-urlhttps://download.pytorch.org/whl/test/c......
  • 蓝桥杯javaB组备赛
    15届蓝桥杯备赛java语法基础IO框架importjava.util.*;importjava.IO.IOException;importjava.IO.BufferedReader;publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{BufferedReaderreader=newBufferedReader(newInputStre......
  • JavaScript库,编写$()和getElementsByClassName()方法
    背景:JavaScript库是一组预先编写好的JavaScript代码集合,旨在简化常见的网页开发任务。这些库通常包含了许多函数和方法,可以帮助开发人员处理各种任务,比如DOM操作、事件处理、动画效果、AJAX请求等等。使用JavaScript库可以节省开发时间,并提供了一种标准化的方法来解决常见的......
  • 【Azure Function & Application Insights】在Azure Function的日志中,发现DrainMode m
    问题描述ApplicaitonInsights收集了AzureFunction的日志,定期发现有”DrainModemodeenabledTraces“。DrainMode是什么意思呢? 问题解答排出模式(Drainmode) 属于FunctionApp 缩放机制中的一部分,当后台检测到FunctionApp请求量不再需要当前的instance时会停止对......
  • JAVA语言学习-Day1
    Java入门特性、版本、环境简单性、面向对象、可移植性、高性能、分布式、动态性(反射机制)、多线程、安全性、健壮性javaSE(标准版)、javaME(嵌入式)、javaEE(企业级)JDK(javadevelopmentkit)、JRE(javaruntimeenvironment)、JVM(javavirtualmachine)卸载jdk删除安装目录、......
  • Codeforces Round 918 (Div. 4)
    CodeforcesRound918(Div.4)D:本题从实现上来说正难则反,应该倒着做在我正着做的时候,由于在访问后面元素的时候没有判边界,导致数组越界,出现奇怪字符在最后答案中。intn,m;inta[N];boolcheck(charc){ if(c=='a'||c=='e')returntrue; elsereturnfalse;}voidsolv......
  • Java登陆第三十六天——VUE3引入CSS
    在一个.Vue文件中,通常包括以下三部分。<template><style><script>.vue中部分传统部分描述<template>HTML代替传统的.html文件<style>CSS代替传统的.js文件<script>JS代替传统的.css文件声明内部的CSS在.Vue文件中,style标签声明CSS。Hello......
  • 【附源码】JAVA计算机毕业设计智慧点餐系统(springboot+mysql+开题+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的快速发展和互联网的普及,人们的生活方式发生了深刻的变化。特别是在餐饮行业,传统的点餐方式已经无法满足现代消费者对于便捷性、个性化......
  • Java常用新特性之“构造器引用”和“数组引用”
    1.构造器引用1.1格式:类名::new1.2说明:构造器引用在执行时,会调用指定的类的构造器,创建其对象。具体调用的是哪个形参列表的构造器呢?取决于函数式接口的抽象方法的形参列表。此抽象方法的形参列表与要调用的构造器的形参列表相同。调用指定构造器后,创建的对象作为......
  • java计算机毕业设计(附源码)医院新型冠状病毒疫苗接种管理系统(ssm+mysql+maven+LW文档)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义在当今全球疫情的背景下,新型冠状病毒疫苗的接种成为了防控疫情的重要手段。然而,由于疫苗接种人群广泛,且接种过程复杂,需要记录的信息量大,因此,传统的人工管理方式已......