SpringBoot项目整合SpringDataElasticsearch
1、创建Maven项目
…
2、配置SpringBoot
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<!-- Add typical dependencies for a web application -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
<!-- Package as an executable jar -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
3、添加SpringBootStarterDataElasticsearch
org.springframework.boot
spring-boot-starter-data-elasticsearch
4、配置application.yml
spring:
data:
elasticsearch:
cluster-name: elasticsearch
cluster-nodes: 127.0.0.1:9300
5、启动类(略)
…
6、创建EmployeeRepository
public interface EmployeeRepository extends ElasticsearchRepository<Employee,Long>{
}
7就可以对es实现增删改了
package cn.itsource.es;
import cn.itsource.es.domain.Employee;
import cn.itsource.es.repository.EmployeeRepository;
import org.elasticsearch.common.io.stream.StreamOutput;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.index.query.*;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortBuilder;
import org.elasticsearch.search.sort.SortFieldAndFormat;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = ESApplication.class)
public class ESTest {
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
@Autowired
private EmployeeRepository employeeRepository;
/*
* (1)创建索引库
* (2)创建映射
* */
@Test
public void test(){
//删库
elasticsearchTemplate.deleteIndex("aigou");
//建库
elasticsearchTemplate.createIndex("aigou");
//创建映射
elasticsearchTemplate.putMapping(Employee.class);
// Employee employee = new Employee(1L,“七牛云”,18);
// employeeRepository.save(employee);
// Optional optionalEmployee = employeeRepository.findById(1L);
// System.out.println(optionalEmployee.get());
}
/**
* 添加一个
*/
@Test
public void testSave(){
Employee employee = new Employee(1L,"七牛云",18);
employeeRepository.save(employee);
}
/**
* 添加多个
*/
@Test
public void testSaveAll(){
employeeRepository.saveAll(Arrays.asList(
new Employee(2L,"曹修鸿",25),
new Employee(3L,"魏光骏",22),
new Employee(4L,"solargen",19),
new Employee(5L,"周强",23)
));
}
//查一个
@Test
public void testFindOne()throws Exception{
System.out.println(employeeRepository.findById(4L).get());
}
//查所有
@Test
public void testFindList(){
for (Employee employee : employeeRepository.findAll()) {
System.out.println(employee);
}
}
//修改
@Test
public void testUpdate()throws Exception{
//索引库中有id,则是修改,索引库中没有id则是添加
employeeRepository.save(new Employee(2L,"曹修鸿",28));
}
//删除
@Test
public void testDelete()throws Exception{
employeeRepository.deleteById(4L);
}
/**
* 高级查询
* 条件查询+分页查询+排序
* 分页查询年龄大于20岁,名字中有"周"的,按照年龄降序排列,每页显示2条
*/
@Test
public void testQuery(){
NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
//拼接查询条件 es有查询与过滤
//查询条件
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
List<QueryBuilder> filter = boolQueryBuilder.filter();
//姓名
filter.add(new TermQueryBuilder("username","周"));
//年龄
filter.add(new RangeQueryBuilder("age").gt(20));
builder.withQuery(boolQueryBuilder);
//排序
builder.withSort(new FieldSortBuilder("age").order(SortOrder.DESC));
//分页
builder.withPageable(PageRequest.of(0,2));
SearchQuery searchQuery = builder.build();
Page<Employee> page = employeeRepository.search(searchQuery);
long totalElements = page.getTotalElements();
List<Employee> content = page.getContent();
System.out.println(totalElements);
for (Employee employee : content) {
System.out.println(employee);
}
}
}