文章目录
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);
}