SpringBoot整合ElasticSearch

目录

版本选择

引入依赖

yml配置

创建实体

实现ElasticsearchRepository

测试

使用ElasticsearchRestTemplate


版本选择

Elasticsearch 7.17.3 对应依赖 Spring Data Elasticsearch 4.4.x,对应springboot版本2.7.x

引入依赖

XML 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

yml配置

javascript 复制代码
spring:
  elasticsearch:
    uris: http://localhost:9200
    connection-timeout: 3s

创建实体

java 复制代码
@Data
@AllArgsConstructor
@Document(indexName = "employees")
public class Employee {
    @Id
    private Long id;
    @Field(type= FieldType.Keyword)
    private String name;
    private int sex;
    private int age;
    @Field(type= FieldType.Text,analyzer="ik_max_word")
    private String address;
    private String remark;
}

实现ElasticsearchRepository

该接口是框架封装的用于操作Elastsearch的高级接口

java 复制代码
@Repository
public interface EmployeeRepository extends ElasticsearchRepository<Employee, Long> {
    List<Employee> findByName(String name);
}

测试

java 复制代码
@Autowired
EmployeeRepository employeeRepository;

@Test
public void testDocument(){

   Employee employee = new Employee(1L,"666",1,18,"北京","java");
    //插入文档
   employeeRepository.save(employee);

   //根据id查询
    Optional<Employee> result = employeeRepository.findById(1L);
    log.info(String.valueOf(result.get()));

    //根据name查询
    List<Employee> list = employeeRepository.findByName("666");
    log.info(String.valueOf(list.get(0)));

}

使用ElasticsearchRestTemplate

ElasticsearchRestTemplate模板类,封装了便捷操作Elasticsearch的模板方法,包括索引 / 映射 / CRUD 等底层操作和高级操作。

java 复制代码
@Autowired
ElasticsearchRestTemplate elasticsearchRestTemplate;
java 复制代码
@Test
public void testCreateIndex(){
    //创建索引
    IndexOperations indexOperations = elasticsearchRestTemplate.indexOps(IndexCoordinates.of("employee_index"));
    if (indexOperations.exists()) {
        log.info("索引已经存在");
    }else {
        //创建索引
        indexOperations.create();
    }
}
@Test
public void testDeleteIndex(){
    //删除索引
    IndexOperations indexOperations = elasticsearchRestTemplate.indexOps(IndexCoordinates.of("employee_index"));
    indexOperations.delete();
}

文档操作

java 复制代码
@Test
public void testQueryDocument(){
    NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
    //查询
    builder.withQuery(QueryBuilders.matchQuery("address","公园"));
    // 设置分页信息
    builder.withPageable(PageRequest.of(0, 5));
    // 设置排序
    builder.withSort(SortBuilders.fieldSort("age").order(SortOrder.DESC));

    SearchHits<Employee> search = elasticsearchRestTemplate.search(builder.build(), Employee.class);
    List<SearchHit<Employee>> searchHits = search.getSearchHits();
    for (SearchHit hit: searchHits){
        log.info("返回结果:"+hit.toString());
    }

}

@Test
public void testInsertBatch(){
    List<Employee> employees = new ArrayList<>();
    employees.add(new Employee("2","张三",1,25,"北京","java"));
    employees.add(new Employee("3","李四",1,28,"山西","pytion"));
    employees.add(new Employee("4","小红",0,26,"天津","php"));

    List<IndexQuery> queries = new ArrayList<>();
    for (Employee employee : employees) {
        IndexQuery indexQuery = new IndexQuery();
        indexQuery.setId(employee.getId());
        String json = JSONObject.toJSONString(employee);
        indexQuery.setSource(json);
        queries.add(indexQuery);
    }
    //bulk批量插入
    elasticsearchRestTemplate.bulkIndex(queries,Employee.class);
}
相关推荐
Renhao-Wan4 分钟前
Java 并发基石:AQS (AbstractQueuedSynchronizer)
java·开发语言
程序员iteng17 分钟前
AI一键图表生成、样式修改的绘图开源工具【easy-draw】
spring boot·开源·node.js
zlp199231 分钟前
xxl-job java.sql.SQLException: interrupt问题排查(二)
java·开发语言
sunnyday042634 分钟前
深入理解Java日志框架:Logback与Log4j2配置对比分析
java·log4j·logback
superman超哥38 分钟前
Rust HashSet与BTreeSet的实现细节:集合类型的底层逻辑
开发语言·后端·rust·编程语言·rust hashset·rust btreeset·集合类型
浩瀚地学38 分钟前
【Java】异常
java·开发语言·经验分享·笔记·学习
张np42 分钟前
java基础-LinkedHashMap
java·开发语言
毕设源码-朱学姐1 小时前
【开题答辩全过程】以 高校图书馆管理系统为例,包含答辩的问题和答案
java
xie_pin_an1 小时前
C++ 从入门到进阶:核心知识与实战指南
java·c++·算法
Wpa.wk1 小时前
性能测试-初识性能测试基础(性能测试流程,计划等)
java·运维·经验分享·测试工具·性能测试