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);
    }
相关推荐
jwolf22 小时前
Elasticsearch向量搜索:从语义搜索到图搜图只有一步之遥
elasticsearch·搜索引擎·ai
你可以叫我仔哥呀3 小时前
ElasticSearch学习笔记三:基础操作(一)
笔记·学习·elasticsearch
hummhumm3 小时前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
java1234_小锋7 小时前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客7 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
我的运维人生7 小时前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享
Mephisto.java11 小时前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
mqiqe11 小时前
Elasticsearch 分词器
python·elasticsearch
小马爱打代码11 小时前
Elasticsearch简介与实操
大数据·elasticsearch·搜索引擎
java1234_小锋20 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎