java使用elasticsearchClient调用es7.17-生成连接、查询系统参数、索引相关操作

这篇具有很好参考价值的文章主要介绍了java使用elasticsearchClient调用es7.17-生成连接、查询系统参数、索引相关操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java调用elasticsearch有几种不同的方式,考虑到以后维护方便,使用elasticSearchClient进行数据交互

maven引入

首先要进行maven引入,后面两个是与json转化有关的,刚开始测试可以无需引入

	<dependency>
		<groupId>co.elastic.clients</groupId>
		<artifactId>elasticsearch-java</artifactId>
		<version>7.17.3</version>
	</dependency>
	<dependency>
		<groupId>com.fasterxml.jackson.core</groupId>
		<artifactId>jackson-databind</artifactId>
		<version>2.12.3</version>
	</dependency>
	<dependency>
		<groupId>jakarta.json</groupId>
		<artifactId>jakarta.json-api</artifactId>
		<version>2.0.1</version>
	</dependency>

相关实体类

1、ModelTestCase

此实体整合了与es系统有关的相关参数

package com.media.business.esTest;

import co.elastic.clients.json.JsonpDeserializer;
import co.elastic.clients.json.JsonpMapper;
import co.elastic.clients.json.SimpleJsonpMapper;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.json.jsonb.JsonbJsonpMapper;
import jakarta.json.spi.JsonProvider;
import jakarta.json.stream.JsonGenerator;
import jakarta.json.stream.JsonParser;

import java.io.StringReader;
import java.io.StringWriter;
import java.lang.reflect.Method;
import java.util.Random;

import static org.junit.Assert.*;

public class ModelTestCase {
    // Same value for all tests in a test run
    private static final int RAND = new Random().nextInt(100);

    protected final JsonpMapper mapper;

    private JsonpMapper setupMapper(int rand) {
        // Randomly choose json-b or jackson
        switch(rand % 3) {
            case 0:
                System.out.println("Using a JsonB mapper (rand = " + rand + ").");
                return new JsonbJsonpMapper() {
                    @Override
                    public boolean ignoreUnknownFields() {
                        return false;
                    }
                };

            case 1:
                System.out.println("Using a Jackson mapper (rand = " + rand + ").");
                return new JacksonJsonpMapper() {
                    @Override
                    public boolean ignoreUnknownFields() {
                        return false;
                    }
                };

            default:
                System.out.println("Using a simple mapper (rand = " + rand + ").");
                return SimpleJsonpMapper.INSTANCE_REJECT_UNKNOWN_FIELDS;
        }
    }

    protected ModelTestCase() {
        this(RAND);
    }

    protected ModelTestCase(int rand) {
        mapper = setupMapper(rand);
    }

    protected <T> String toJson(T value) {
        return toJson(value, mapper);
    }

    public static <T> String toJson(T value, JsonpMapper mapper) {
        StringWriter sw = new StringWriter();
        JsonProvider provider = mapper.jsonProvider();
        JsonGenerator generator = provider.createGenerator(sw);
        mapper.serialize(value, generator);
        generator.close();
        return sw.toString();
    }

    public static <T> T fromJson(String json, Class<T> clazz, JsonpMapper mapper) {
        JsonParser parser = mapper.jsonProvider().createParser(new StringReader(json));
        return mapper.deserialize(parser, clazz);
    }

    protected <T> T fromJson(String json, Class<T> clazz) {
        return fromJson(json, clazz, mapper);
    }

    @SuppressWarnings("unchecked")
    protected <T> T checkJsonRoundtrip(T value, String expectedJson) {
        assertEquals(expectedJson, toJson(value));
        return fromJson(expectedJson, (Class<T>)value.getClass());
    }

    protected <T> T fromJson(String json, JsonpDeserializer<T> deserializer) {
        return fromJson(json, deserializer, mapper);
    }

    protected <T> T fromJson(String json, JsonpDeserializer<T> deserializer, JsonpMapper mapper) {
        JsonParser parser = mapper.jsonProvider().createParser(new StringReader(json));
        return deserializer.deserialize(parser, mapper);
    }


    public static void assertGetterType(Class<?> expected, Class<?> clazz, String name) {
        Method method;
        try {
            method = clazz.getMethod(name);
        } catch (NoSuchMethodException e) {
            fail("Getter '" + clazz.getName() + "." + name + "' doesn't exist");
            return;
        }

        assertSame(expected, method.getReturnType());
    }
}

2、Person

此实体主要为测试索引中的数据结构

@Data
public class Person {
//    @JsonIgnore //这是doc_id,不用序列化
    private Integer id;
    
    private String name;
    private Integer age;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
}

一、基础java调用

1、生成es连接

	//生成es连接
    private ElasticsearchClient getEsClient() {
        try {
            //调用es有同步和异步之分,下列方法是同步阻塞调用
            // Create the low-level client
            RestClient restClient = RestClient.builder(
                    new HttpHost(esIp, esPort)).build();

            // Create the transport with a Jackson mapper
            ElasticsearchTransport transport = new RestClientTransport(
                    restClient, new JacksonJsonpMapper());

            // And create the API client
            ElasticsearchClient client = new ElasticsearchClient(transport);

            return client;
        } catch (Exception e) {
            e.printStackTrace();
            log.error("生成esClient失败" + e);
        }
        return null;
    }

2、查询es相关信息

	//查询es系统相关信息
    @Test
    public void testCatRequest() throws IOException {
        ElasticsearchClient client = this.getEsClient();

        // Cat requests should have the "format=json" added by the transport
        NodesResponse nodes = client.cat().nodes(_0 -> _0);
        System.out.println(ModelTestCase.toJson(nodes, client._transport().jsonpMapper()));
    }

二、索引相关

1、新建索引1

这种方式只是创建的一个空索引,如果需要对索引进行字段定义,用第二种方式文章来源地址https://www.toymoban.com/news/detail-557134.html

	public void addIndex() throws Exception {
        try {
            //判断索引是否存在
            boolean flag = ifExistIndex(indexName);
            if (flag) {
                System.out.println("索引已存在");
                return;
            }

            ElasticsearchClient client = this.getEsClient();

            CreateIndexResponse products = client.indices()
                    .create(c -> c.index(indexName)
                            //添加此索引的别名为foo
//                      .aliases("foo2", aliasBuilder -> aliasBuilder.isWriteIndex(true))
                    );
            System.out.println(JSON.toJSONString(products));
            System.out.println("成功");

            return;
        } catch (Exception e) {
            e.printStackTrace();
            log.error("新增es索引失败" + e);
        }
        System.out.println("失败");
    }

2、新建索引2

	@Test
    public void addIndex() throws Exception {
        try {
            ElasticsearchClient client = this.getEsClient();

            Person p = new Person(1,"张三",20,new Date());
            client.index(_1 -> _1
                    .index("testaaa")
                    .id(p.getId().toString())
                    .document(p));


            System.out.println(JSON.toJSONString(p));
            System.out.println("成功");

            return;
        } catch (Exception e) {
            e.printStackTrace();
            log.error("新增es索引失败" + e);
        }
        System.out.println("失败");
    }

3、判断索引是否存在

	//判断是否存在索引
    private boolean ifExistIndex(String indexName) throws Exception {
        ElasticsearchClient client = this.getEsClient();
        BooleanResponse existsResponse = client.indices().exists(b -> b.index(indexName));
        return existsResponse.value();
    }

到了这里,关于java使用elasticsearchClient调用es7.17-生成连接、查询系统参数、索引相关操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • es7.17版本之后的查询警告提示解决办法

    #! Elasticsearch built-in security features are not enabled. Without authentication, your cluster could be accessible to anyone. See https://www.elastic.co/guide/en/elasticsearch/reference/7.15/security-minimal-setup.html to enable security 😈 打开es安装路径,打开config文件夹,编辑 elasticsearch.yml,在里面添加 然后保存退出,重启

    2024年02月14日
    浏览(31)
  • es使用java来批量创建文档和批量删除文档(基于es7.8)

    批量操作实际就是执行 bulk命令 先引入pom依赖: 创建User类 3、然后在名为user的索引里,插入多条数据,在main方法里进行测试: 打印结果是: 下面执行postman进行查询 http://127.0.0.1:9200/user/_search : 下面对指定的id进行批量删除: 执行结果是:

    2024年02月13日
    浏览(35)
  • ES7.5升级7.17后在写多读少场景下CPU、IO飙升

    1.ES PAAS管理的集群升级了100+,从7.5升级到7.17 (保证每个大版本最终仅维护一个小版本集群) 2.由于业务使用差异大,也出了不少问题,前面的文章也有提到过Integer类型字段使用terms查询效率低的情况 3.这里再分析一个CPU、IO飙升的场景 1.用户报障:“ES集群写入吞吐量变小了

    2023年04月08日
    浏览(26)
  • ES7 and or 关联条件查询JAVA

    @ES7 and or 关联条件查询JAVA 实现条件( platform=‘xxx’ and (home_path=‘xxx’ or nick_name=‘xxx’ )) kibana

    2024年02月08日
    浏览(37)
  • ES7.x的查询语句及java查询语句

    Elasticsearch 7.x 是一个基于 Lucene 的分布式搜索引擎,它提供了一个分布式全文搜索引擎,可以快速、准确地搜索、分析和存储海量数据。Elasticsearch 7.x 的主要特点包括: 分布式架构:Elasticsearch 7.x 是一个分布式系统,它可以运行在多个节点上,每个节点都是相互独立的,并且

    2024年02月08日
    浏览(34)
  • Java(102):ES7.14,RestHighLevelClient创建索引时报错 create is deprecated

    一、Maven引用 二、遇到问题:ES7.14,RestHighLevelClient创建索引时报错 create  is deprecated \\\'create(org.elasticsearch.action.admin.indices.create.CreateIndexRequest, org.elasticsearch.client.RequestOptions)\\\' is deprecated   出现原因 : 这是因为在使用create方法时 , 会有两个选择 , 其中一个已经过时了 client.indic

    2023年04月09日
    浏览(30)
  • Quartus17.1调用IP核生成inst.v文件调用

    使用Quartus17.1时,难免会需要调用ip核,目前我会使用的有2种方法,一是通过platform生成qsys文件调用,二是IP Catalog生成inst.v文件调用,第一种方法的使用请(戳我【后续会写】),下面详细记录第二种方法的使用(以PLL为例,这是一个分频、倍频的ip核)。 打开IP Catalog面板

    2024年02月16日
    浏览(40)
  • 基于 SpringBoot 2.7.x 使用最新的 Elasticsearch Java API Client 之 ElasticsearchClient

    从 Java Rest Client 7.15.0 版本开始,Elasticsearch 官方决定将 RestHighLevelClient 标记为废弃的,并推荐使用新的 Java API Client,即 ElasticsearchClient. 为什么要将 RestHighLevelClient 废弃,大概有以下几点: 维护成本高 :RestHighLevelClient 需要和 Elasticsearch APIs 的更新保持一致,而 Elasticsearch A

    2024年02月08日
    浏览(38)
  • 【ES】笔记-生成器函数与调用

    function* 这种声明方式 (function后跟一个星号)会定义一个生成器函数 (generator function),它返回一个 Generator 对象。 如何调用呢?先看下里面的内容 返回一个这个生成器的 迭代器 ( iterator )对象。 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/function* 语法

    2024年02月10日
    浏览(27)
  • Elasticsearch“滚动查询“(Scrolling)的机制的与Java使用ES Client 调用滚动查询

    ES在进行普通的查询时,默认只会查询出来10条数据。我们通过设置es中的size可以将最终的查询结果从10增加到10000。如果需要查询数据量大于es的翻页限制或者需要将es的数据进行导出又当如何? Elasticsearch提供了一种称为 \\\"滚动查询\\\"(Scrolling) 的机制,用于处理大型数据集的

    2024年02月11日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包