elasticsearch集成springboot详细使用

1.es下载&配置

配置JVM

配置跨域

配置https和密码

2.es启动

.\elasticsearch.bat

或 后台启动:

nohup ./bin/elasticsearch&

浏览器访问:https://localhost:9200

输入账户:elastic / 123456

3.重置es密码

.\elasticsearch-reset-password.bat -u elastic -i

4.安装图形化插件:elasticsearch-head插件,完成图形化界面的效果,完成索引数据的查看
es核心概念

面向文档

可以对文档(而非成行成列的数据)进行索引、搜索、排序、过滤

Elasticsearch对比传统[关系型数据库]如下:

Relational DB ‐> Databases ‐> Tables ‐> Rows ‐> Columns

Elasticsearch ‐> Index ‐> Types ‐> Documents ‐> Fields

集群cluster:一个集群就是由一个或多个节点组织在一起,它们共同持有整个的数据,并一起提供索引和搜索功能。一个集群由 一个唯一的名字标识,这个名字默认就是"elasticsearch"。这个名字是重要的,因为一个节点只能通过指定某个集 群的名字,来加入这个集群。

节点node:一个节点是集群中的一个服务器,作为集群的一部分,它存储数据,参与集群的索引和搜索功能;一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫 做"elasticsearch"的集群中

分片和复制 shards&replicas:一个索引可以存储超出单个结点硬件限制的大量数据

ElasticSearch客户端操作:

  • 使用elasticsearch-head插件
  • 使用elasticsearch提供的Restful接口直接访问
  • 使用elasticsearch提供的API进行访问

Elasticsearch的接口语法:


查询文档document有三种方式:

  • 根据id查询;
  • 根据关键词查询
  • 根据输入的内容先分词,再查询
elasticsearch集成springboot使用
xml 复制代码
      <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
java 复制代码
1.创建实体

import lombok.Data;
import org.apache.catalina.Store;
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;

@Document(indexName = "article")
@Data
public class Article {
    @Id
    @Field(index = false,type = FieldType.Integer)
    private Integer id;

    /**
     * index:是否设置分词  默认为true
     * analyzer:储存时使用的分词器
     * searchAnalyze:搜索时使用的分词器
     * store:是否存储  默认为false
     * type:数据类型  默认值是FieldType.Auto
     *
     */
    @Field(analyzer = "ik_smart",searchAnalyzer = "ik_smart",store = true,type = FieldType.Text)
    private String title;

    @Field(analyzer = "ik_smart",searchAnalyzer = "ik_smart",store = true,type = FieldType.Text)
    private String context;

    @Field(store = true,type =FieldType.Integer)
    private  Integer hits;
}


2.创建CRUD操作类
import com.cloud.entities.Article;
import org.springframework.data.domain.Pageable;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 *  自定义接口需要继承ElasticsearchRepository<实体类型,主键类型>  基本的crud 分页
 */
@Component
public interface ArticalRepository extends ElasticsearchRepository<Article,Integer> {
    List<Article> findByTitle(String title);


    List<Article> findArticleByTitleOrContext(String title,String context);

    /**
     * 根据标题或内存查询(含分页)
      * @param title
     * @param context
     * @param pageable0
     * @return
     */
    List<Article> findByTitleOrContext(String title, String context, Pageable pageable0);

}

3.创建启动入口类
@SpringBootApplication
@MapperScan("com.cloud.mapper")  //import tk.mybatis.spring.annotation.MapperScan
public class Main8001 {
    public static void main(String[] args) {
        SpringApplication.run(Main8001.class,args);
    }
  }
4.配置springboot配置es
  spring:
    elasticsearch:
    	uris: http://localhost:9200
   		connection-timeout: 5s
        #username: elastic
        #password: 123456
  
5.创建单元测试类
import com.cloud.Main8001;
import com.cloud.entities.Article;
import com.cloud.repository.ArticalRepository;
import jakarta.annotation.Resource;
import org.elasticsearch.client.RestClient;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.document.Document;
import org.springframework.data.elasticsearch.core.query.UpdateQuery;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.Arrays;
import java.util.Map;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Main8001.class)
public class ArticleTest {


    @Resource
    private RestClient restClient;

    @Resource
    private ElasticsearchTemplate elasticsearchTemplate;

    @Resource
    private ArticalRepository articalRepository;

    /**1.
     * 使用ElasticsearchTemplate
     */
    @Test
    void insert(){
        Article article=new Article();
        article.setTitle("男乒乓");
        article.setId(1);
        article.setContext("中国赢了");
        article.setHits(100);
        elasticsearchTemplate.save(article);
    }

    /**
     * 2.
     * 使用Repository
     */
    @Test
    void insert2(){
        Article article=new Article();
        article.setTitle("男乒乓2");
        article.setId(2);
        article.setContext("中国赢了2");
        article.setHits(120);
        articalRepository.save(article);
    }

    /**
     * 批量保存
     */
    @Test
    void insert3(){
        Article article=new Article();
        article.setTitle("男乒乓3");
        article.setId(3);
        article.setContext("中国赢了2");
        article.setHits(130);
        articalRepository.saveAll(Arrays.asList(article));
    }


    @Test
    void update(){
        Article article= articalRepository.findById(2).get();
        article.setTitle("篮球");
        articalRepository.save(article);
    }

    @Test
    void update2(){
        Article article=new Article();
        article.setId(2);
        article.setTitle("网球");
        elasticsearchTemplate.update(article);
    }

    /**
     *  查询全部数据
     */

    @Test
    void findAll(){
        Iterable<Article> articles=articalRepository.findAll();
        articles.forEach(System.out::println);
    }


    /**
     * 根据id删除
     */

    @Test
    void deleteById(){
        articalRepository.deleteById(3);
    }

    /**
     * 删除:传入实体类删
     */
    @Test
    void delete(){
        Article article=new Article();
        article.setId(3);
        articalRepository.delete(article);
    }



    /**
     * 删除索引里面所有数据
     */
    @Test
    void deleteAll(){
        articalRepository.deleteAll();
    }


}
测试工具:postman
es 参考资料:

https://cloud.tencent.com/developer/article/2249187

https://www.hadoopdoc.com/elasticsearch/elasticsearch-begin-tutorial

相关推荐
阿伟*rui1 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
XiaoLeisj3 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck3 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei3 小时前
java的类加载机制的学习
java·学习
Yaml45 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~5 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616885 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7896 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
记录成长java6 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet
睡觉谁叫~~~6 小时前
一文解秘Rust如何与Java互操作
java·开发语言·后端·rust