SpringBoot-ES操作

ES:分布式全文搜索引擎

Elasticsearch:是一个分布式全文搜索引擎

工作流程 :

  • ES通过分词器 , 分出对应的关键字 ,
  • 用户输入对应的关键字
  • 通过关键字 , 查找对应的所有带有关键字的数据的id值 ,
  • 然后通过这些id值获取到对应的详细数据

概念描述
索引是sql中为了加速查询设置的主键 , 根据主键查数据
倒排索引整个工作就是依靠倒排索引实现的 , 倒排索引是通过一个个的文档先建立倒排索引的库 , 是根据关键字查索引
创建文档
使用文档

下载安装运行ES:

  • 下载
    • https://www.elastic.co/cn/downloads/elasticsearch
    • ES的包中内置了一个jdk , 和大量的jar , ES的运行就是要依靠这些
  • 启动:
    • 在bin目录, 双击elasticsearch.bat ,启动即可 , 默认端口号是9200

ES的基本操作:

要想操作ES , 我们发送web请求即可

ES全面支持RESTful这种风格的操作

就是创建一个索引为books的 , 这个索引就相当于数据库中的库一样

索引操作uri请求注意事项
创建索引http://localhost:9200/booksput请求携带请求体 , json格式的 , 用来设置分词器 , 使用put是为了它的幂等性
查看索引http://localhost:9200/booksget请求不能携带请求体
操作索引http://localhost:9200/books/_doc/1post请求不能携带请求体 , 后边的id就是指定的文档
删除索引http://localhost:9200/booksdelete请求不能携带请求体
{
    "acknowledged": true,  //这个就是表示本次操作成功
    "shards_acknowledged": true,
    "index": "books"  //这个就是索引的名称 books , 
    //注意这个索引的名称是不允许重复的 , 
}

  • 使用ES还要下载ik分词器插件
  • 地址 : https://github.com/medcl/elasticsearch-analysis-ik/releases
  • 将下载后的插件放在ES目录下的plugins文件夹
  • ik分词器是一个插件 , 要想使用要重新启动ES

在创建索引的时候 , 在请求体中设置一组值

{
    "mappings":{
        "properties":{
            "id":{ 
                "type":"keyword" //这个值指的是ES的类型 , 设置这个属性是关键字
                //不让按照这个属性查询 : "index":"false"
            },
            "name":{
                "type":"text", //告诉ES这个字段提供的是文本信息 , 可以被分词
                "analyzer":"ik_max_word", //表示分词器 , 也就是这个字段要进行分词
                "copy_to":"all" //表示接收到name这个信息之后  , 不止在name中保存信息 , 同时将其拷贝到all这个虚拟属性中 , 
                //这么做是因为 : 如果输入一个 spring字段 , 这个字段是在name中查找还是在address中查找  , 只能在一个属性中查找  , 但是我们希望的是 , 不管是name中还是address中带有spring这个字段 , 都可以查到 , 所以 , 我们要将name和address中的信息组成一个整体 , 也就是下边的all属性字段
            },
            "address":{
                "type":"text",
                "analyzer":"ik_max_word",
                "copy_to":"all"
            },
            "description":{
                "type":"text",
                "analyzer":"ik_max_word"
            },
            //这个属性是一个虚拟的 , 可以随便起名字 , 在上边指定的 "copy_to":"all" 属性 , 主要用于查询的 , 包含了name和address的所有信息 , 在查询的时候 , 就可以同时查找name,address中带有spring的所有信息 
            "all":{   
                "type":"text",
                "analyzer":"ik_max_word"
            }
        }
    }
}

ES文档操作 :

添加文档 :

文档操作格式请求注意事项
添加文档http://localhost:9200/books/_create/2post请求记得指定id,不然会使用默认的id,是一个长字符串,同时记得在请求体中添加json格式的文档数据
添加文档http://localhost:9200/books/_doc/3post请求同上
查看文档数据http://localhost:9200/books/_doc/3get请求注意 , 这里不能使用_create , 只能使用_doc
查看所有文档数据http://localhost:9200/books/_searchget请求这里使用的不是_doc , 而是_search
按照分词进行查询http://localhost:9200/books/_search?q=name:思尘get请求这里使用的不是_doc , 而是_search
按照id删除文档http://localhost:9200/books/_doc/3delete请求这里使用的也是_doc
按照id修改文档(全量修改)http://localhost:9200/books/_doc/3put请求这里使用的也是_doc , 要携带json类型的值 , 可以只携带一条数据 , 其他没有设置值的属性就会被抹掉 , 并且每修改一次 , 它的版本号会加一
按照id修改文档(修改单个属性,不进行覆盖)http://localhost:9200/books/_update/3post请求携带的数据要以"doc":{}包裹 , 就可以指定修改对应的数据 , 而不覆盖整个内容 , 版本号会加一

SpringBoot整合ES操作 :

低级别的 : low level Client

  • 导入对应坐标 :

    • <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
      </dependency>
      
  • 编辑对应的配置 :

    • elasticsearch:
        rest:
          uris: http://localhost:9200
      
  • 导入对应的Template

    • @Autowired
      private ElasticsearchRestTemplate restTemplate;
      

高级别的 : high level Client

  • 导入对应的依赖 :

    • <dependency>
          <groupId>org.elasticsearch.client</groupId>
          <artifactId>elasticsearch-rest-high-level-client</artifactId>
      </dependency>
      
  • 编辑配置 :

    • //SpringBoot只提供了低版本的配置 , 高版本的没有做整合 ,所以没有配置 , 只能硬编码
      

创建对象 :

private RestHighLevelClient client;

创建一个索引:

  • void test{
        HttpHost host = HttpHost.create("http://localhost:9200"); //创建一个请求 
        RestClientBuilder builder = RestClient.builder(host);
        client = new RestHighLevelClient(builder); //获取RestHighLevelClient对象
    
        //注意这里要使用这个import org.elasticsearch.client.indices.CreateIndexRequest;包不然会报错 , 显
        CreateIndexRequest request = new CreateIndexRequest("books"); //专门用来创建索引用的
        reqeust.source(json格式的数据,XcontentType.JSON) //设置请求中的参数 : 
        client.indices().create(request, RequestOptions.DEFAULT);
    
        client.close(); //需要关闭
    }
    

设置文档 :

  •     HttpHost host = HttpHost.create("http://localhost:9200"); //创建一个请求 
        RestClientBuilder builder = RestClient.builder(host);
        client = new RestHighLevelClient(builder); //获取RestHighLevelClient对象
        
        IndexRequest reqeust = new IndexRequest("books").id("1");
        String json = "";
        request.source(json , XContentType.JSON);
        client.index(request,RequestOptions.DEFAULT);
        client.close(); //需要关闭
    
  • 批量设置文档 :

  • @Test
    void test(){
        HttpHost host = HttpHost.create("http://localhost:9200"); //创建一个请求 
        RestClientBuilder builder = RestClient.builder(host);
        client = new RestHighLevelClient(builder); //获取RestHighLevelClient对象
        
        List<Book> bookList = bookDao.selectList(null);
        BulkRequest bule = new BulkRequest();
    for(Book book:bookList){
    IndexRequest request = new IndexRequest("books").id(book.getId().toString());
        String json = JSON.toJSONString(book);
        request.source(json,XContentType.JSON);
        bulk.add(request);
    }
        client.bulk(bulk,RequestOptions.DEFAULT);
        
        client.close(); //需要关闭
    }
    
  • 查询文档 :

    image-20220407184235708

  • 按条件查文档:

    image-20220407184534694

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于 Spring Boot Starter Data 整合 Elasticsearch,可以按照以下步骤进行: 1. 在 pom.xml 文件中添加 Elasticsearch 的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> </dependency> ``` 2. 在 application.properties 文件中配置 Elasticsearch 的连接信息: ```properties spring.data.elasticsearch.cluster-nodes=localhost:9300 spring.data.elasticsearch.cluster-name=my-application ``` 其中,cluster-nodes 是 Elasticsearch 集群节点的地址,cluster-name 是集群名称。 3. 创建一个 ElasticsearchRepository 接口来定义 Elasticsearch 的操作: ```java public interface BookRepository extends ElasticsearchRepository<Book, String> { } ``` 其中,Book 是实体类,String 是实体类主键的数据类型。 4. 在需要使用 Elasticsearch 的地方注入 ElasticsearchRepository 接口,并使用它进行数据操作: ```java @Autowired private BookRepository bookRepository; public void saveBook(Book book) { bookRepository.save(book); } public List<Book> findBooksByAuthor(String author) { return bookRepository.findByAuthor(author); } ``` 这里的 save 方法是保存数据,findByAuthor 方法是按照作者查询数据。 以上就是 Spring Boot Starter Data 整合 Elasticsearch 的基本步骤。需要注意的是,这里使用的是 ElasticsearchRepository 接口,它提供了一些常用的操作方法,如果需要更多的操作,可以使用 ElasticsearchTemplate 类来进行操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值