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

发布于:2024-10-17 ⋅ 阅读:(14) ⋅ 点赞:(0)


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

<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()返回索引管理对象

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即可

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信息

{
	"properties":{
		"id":{
			"type":"long"
		},
		"title":{
			"type":"text",
			"analyzer":"ik_smart",
			"store":true
		},
		"content":{
			"type":"text",
			"analyzer":"ik_smart",
			"store":true
		}		
	}
}
    @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)

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

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

    @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);
    }