SpringBoot项目整合SpringDataElasticsearch

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

}

发布了31 篇原创文章 · 获赞 23 · 访问量 3820

猜你喜欢

转载自blog.csdn.net/leilei1366615/article/details/98634598