ElasticSearch的springboot项目
1、导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
2、配置
elasticsearch.host=127.0.0.1
elasticsearch.port=1001
3、配置config
package com.ycz.config;
import lombok.Data;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.config.AbstractElasticsearchConfiguration;
/**
* @Description:
* @Author: Alex
* @Date 2022-06-30-20:50
* @Version: V1.0
**/
@ConfigurationProperties(prefix = "elasticsearch")
@Configuration
@Data
public class ElasticSearchConfig extends AbstractElasticsearchConfiguration {
private String host;
private Integer port;
@Override
public RestHighLevelClient elasticsearchClient() {
RestClientBuilder builder = RestClient.builder(new HttpHost(host , port));
RestHighLevelClient client = new RestHighLevelClient(builder);
return client;
}
}
4、创建实体类
package com.ycz.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
/**
* @Description:
* @Author: Alex
* @Date 2022-06-30-20:48
* @Version: V1.0
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "user" , shards = 3 , replicas = 1)
public class User {
@Id
private Integer id;
@Field(type = FieldType.Text)
private String name;
@Field(type = FieldType.Integer)
private Integer age;
@Field(type = FieldType.Keyword)
private String address;
}
5、写dao
package com.ycz.dao;
import com.ycz.entity.User;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
/**
* @Description:
* @Author: Alex
* @Date 2022-06-30-20:55
* @Version: V1.0
**/
@Repository
public interface UserDao extends ElasticsearchRepository<User , Long> {
}
6、测试
(1)创建索引
package com.ycz;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
@SpringBootTest
class ElasticSearchSpringbootApplicationTests {
@Autowired
private ElasticsearchRestTemplate restTemplate;
@Test
void contextLoads() {
//会去自动读取其配置,之后创建
System.out.println("创建索引");
}
}
结果:
(2)删除索引
@Test
void deleteIndex(){
boolean b = restTemplate.deleteIndex(User.class);
System.out.println(b);
}
结果:
(3)插入user数据
@Test
public void saveData(){
User user = new User();
user.setAge(18);
user.setAddress("深圳");
user.setId(1);
user.setName("啊实打实大师");
userDao.save(user);
}
结果:
(4)普通查询
@Test
public void search(){
Iterable<User> all = userDao.findAll();
all.forEach(System.out::println);
}
结果:
(5)批量插入
@Test
public void saveBatch(){
List<User> userList = new ArrayList<>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setAge(10 + i);
user.setId( 3 + i);
user.setName("admin:" + i);
user.setAddress("深圳【"+i + "】");
userList.add(user);
}
userDao.saveAll(userList);
}
(6)分页条件查询
@Test
public void findByPage(){
Sort sort = Sort.by(Sort.Direction.DESC, "age");
int currentPage = 0;
int size = 5;
PageRequest of = PageRequest.of(currentPage, size , sort);
Page<User> all = userDao.findAll(of);
all.getContent().forEach(System.out::println);
}
结果: