025 elasticsearch索引管理-Java原生客户端

文章目录

elasticsearch版本7.10.2,要求java客户端与之相匹配,推荐Springboot版本是2.3以上版本

依赖配置使用的是JUnit 5(由<artifactId>spring-boot-starter-test</artifactId>提供支持),而@Before注解是JUnit 4中的注解。在JUnit 5中,应该使用@BeforeEach来代替@Before。

替换注解:

将所有的@Before注解替换为@BeforeEach。

确保你的测试类使用了JUnit 5的相关注解,如@Test(JUnit 5中的@Test注解位于org.junit.jupiter.api.Test)。

确保测试类正确配置:

确保你的测试类上没有使用JUnit 4的@RunWith注解。

如果使用了Spring的测试支持,确保类上有@SpringBootTest或其他相关的Spring测试注解。

更新测试方法:

确认所有的测试方法都使用了JUnit 5的@Test注解。

pom.xml

xml 复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <artifactId>chubemall-search</artifactId>
    <packaging>jar</packaging>

    <name>chubemall-search</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
        <elasticsearch.version>7.10.2</elasticsearch.version>
    </properties>



    <dependencies>
<!--        <dependency>-->
<!--            <groupId>junit</groupId>-->
<!--            <artifactId>junit</artifactId>-->
<!--            <version>3.8.1</version>-->
<!--            <scope>test</scope>-->
<!--        </dependency>-->

        <!--引入common公共模块-->
        <dependency>
            <groupId>com.xd.cubemall</groupId>
            <artifactId>cubemall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>



        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

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

        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.10.2</version>
        </dependency>


    </dependencies>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>


        </dependencies>
    </dependencyManagement>
</project>

1创建索引

步骤:

1.创建一个RestHightLevelClient对象,相当于和服务端建立连接

2.使用client的索引管理的对象,indices()返回索引管理对象

java 复制代码
package com.xd.cubemall.es;


import org.apache.http.HttpHost;
import org.elasticsearch.client.IndicesClient;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.junit.jupiter.api.Test;


/**
 * 索引管理
 */
public class IndexManager {
    @Test
    public void createIndex() throws Exception {
        //创建一个client对象
        RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("1.1.1.1",9200),
                new HttpHost("2.2.2.2",9200),
                new HttpHost("3.3.3.3",9200)
        ));
        //获得索引管理对象
        IndicesClient indicesClient = client.indices();
        //两个参数
        //1.创建索引请求对象
        CreateIndexRequest request = new CreateIndexRequest("hello");
        //2.请求选项,使用默认值。配置请求头,主要用于认证。
        CreateIndexResponse response = indicesClient.create(request, RequestOptions.DEFAULT);
        System.out.println(response);
    }
}

2.创建索引并设置settings信息

CreateIndexRequest对象中设置settings即可

java 复制代码
package com.xd.cubemall.es;


import org.apache.http.HttpHost;
import org.elasticsearch.client.IndicesClient;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.common.settings.Settings;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;


/**
 * 索引管理
 */
public class IndexManager {


    private RestHighLevelClient client;

    @BeforeEach
    public void init() {
        //创建一个client对象
        client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("1.1.1.1",9200),
                new HttpHost("2.2.2.2",9200),
                new HttpHost("3.3.3.3",9200)
        ));
    }



    @Test
    public void createIndex() throws Exception {

        //获得索引管理对象
        IndicesClient indicesClient = client.indices();
        //两个参数
        //1.创建索引请求对象
        CreateIndexRequest request = new CreateIndexRequest("hello");
        //2.请求选项,使用默认值。配置请求头,主要用于认证。
        CreateIndexResponse response = indicesClient.create(request, RequestOptions.DEFAULT);
        //显示结果
        System.out.println(response);
    }


    @Test
    public void createIndex2() throws Exception {

        CreateIndexRequest request = new CreateIndexRequest("hello1")
                .settings(Settings.builder()
                        .put("number_of_shards", 5)
                        .put("number_of_replicas",1)
                        .build()
                );
        System.out.println("Client is null: " + (client == null));
        System.out.println("Request is null: " + (request == null));
        client.indices().create(request,RequestOptions.DEFAULT);
    }


}

3.创建索引并设置mapping信息

json 复制代码
{
	"properties":{
		"id":{
			"type":"long"
		},
		"title":{
			"type":"text",
			"analyzer":"ik_smart",
			"store":true
		},
		"content":{
			"type":"text",
			"analyzer":"ik_smart",
			"store":true
		}		
	}
}
java 复制代码
    @Test
    public void createIndex3() throws Exception {
        XContentBuilder mappings = XContentFactory.jsonBuilder()
                .startObject()
                    .startObject("properties")
                        .startObject("id")
                            .field("type","long")
                        .endObject()
                        .startObject("title")
                            .field("type","text")
                            .field("analyzer","ik_smart")
                            .field("store",true)
                        .endObject()
                        .startObject("content")
                            .field("type","text")
                            .field("analyzer","ik_smart")
                            .field("store",true)
                        .endObject()
                    .endObject()
                .endObject();

        CreateIndexRequest request = new CreateIndexRequest("hello2")
                .settings(Settings.builder()
                        .put("number_of_shards", 5)
                        .put("number_of_replicas",1)
                        .build()
                )
                .mapping(mappings);
        client.indices().create(request, RequestOptions.DEFAULT);

    }

4.删除索引库

DeleteIndexRequest对象,其中包含索引库的名称即可

indices().delete(request)

java 复制代码
    @Test
    public void deleteIndex() throws Exception {
        client.indices().delete(new DeleteIndexRequest("hello"),RequestOptions.DEFAULT);
    }

5.给未设置mapping的索引设置mapping

java 复制代码
    @Test
    public void putMappings() throws Exception {
        String mappings = "{\n" +
                "\t\"properties\":{\n" +
                "\t\t\"id\":{\n" +
                "\t\t\t\"type\":\"long\"\n" +
                "\t\t},\n" +
                "\t\t\"title\":{\n" +
                "\t\t\t\"type\":\"text\",\n" +
                "\t\t\t\"analyzer\":\"ik_smart\",\n" +
                "\t\t\t\"store\":true\n" +
                "\t\t},\n" +
                "\t\t\"content\":{\n" +
                "\t\t\t\"type\":\"text\",\n" +
                "\t\t\t\"analyzer\":\"ik_smart\",\n" +
                "\t\t\t\"store\":true\n" +
                "\t\t}\t\t\n" +
                "\t}\n" +
                "}";
        PutMappingRequest request = new PutMappingRequest("hello1")
                .source(mappings, XContentType.JSON);
        client.indices().putMapping(request,RequestOptions.DEFAULT);
    }
相关推荐
Elasticsearch8 小时前
Elasticsearch:使用 AI Agent 来创建 workflows
elasticsearch
gll77310 小时前
RAG 检索层实战:Redis 缓存 + ES 混合检索 + BGE-Rerank 重排全链路落地与踩坑
elasticsearch
Elasticsearch11 小时前
ES 存日志很贵?我用 ES 9.5 把日志从 4.5G 压到 412M 压缩比11.2倍,日志硬扫每秒128万行!
elasticsearch
Elasticsearch14 小时前
Elasticsearch 作为统一平台:引入第二套数据系统究竟要付出什么代价
elasticsearch
Elastic 中国社区官方博客14 小时前
Elasticsearch:列式索引模式 - Columnar index mode
大数据·数据库·elasticsearch·搜索引擎·全文检索
Elasticsearch14 小时前
Elasticsearch 的批量查询阶段如何在大规模场景下提升搜索性能
elasticsearch
Ramboooooooo16 小时前
SkyWalking-10.4.0 Docker + Nacos + Elasticsearch 生产级部署手册
elasticsearch·docker·skywalking
互联网中的一颗神经元1 天前
04 — 安全撤销:改错了怎么退回去
大数据·安全·elasticsearch
Elasticsearch1 天前
Elasticsearch:列式索引模式 - Columnar index mode
elasticsearch
Elasticsearch2 天前
从 CrashLoopBackOff 到根本原因,只需几秒:使用 Elastic Observability 自动化 20 分钟的 Kubernetes 调查流
elasticsearch