springboot检索

一、Elasticsearch简介&安装

前言

应用程序中经常需要添加检索功能,开源的ElasticSearch是目前全文搜索引擎的首选。

可以快速存储、搜索和分析海量数据。

SpringBoot目前整合Spring Data ElasticSearch提供了便捷的检索功能支持。

ElasticSearch是一个分布式搜索服务,提供了Restful API,底层基于Lucene,采用多shard(分片)的方式保证数据的安全性,并且服务提供自动reshsharding的功能。

安装

docker search elasticsearch

注意事项

elasticsearch是java写的。默认会占用2G的JVM内存

二、ElasticSearch快速入门

ES中使用JSON作为序列化格式

ES面向文档检索

概念

以==员工文档==的形式存储为例:一个文档代表一个员工数据。存储数据到ElasticSearch的行为叫做索引

但在索引一个文档之前,需要确定将文档存储在哪里

一个ElasticSearch集群可以包含多个 索引,相应的每个索引包含多个 类型。这些不同的类型存储着多个 文档 每个文档又有多个 属性

类似关系

  • 索引-数据库
  • 类型-表
  • 文档-表中的记录
  • 属性-列

在这里插入图片描述

操作

  • 每个雇员索引一个文档,包含该雇员的所有信息
  • 每个文档都将是employee类型
  • 该类型位于索引megacorn内
  • 该索引保存在我们的ElasticSearch集群中

实际操作只需要一条指令就可以完成!!!!

PUT /megacorp/employee/1

{
    "first_name":"张三",
    "last_name":"Smith",
    "age":25,
    "hobby":["football","basketball"]
}

PUT /megacorp/employee/1 此命令包含了三个信息

megacorp:索引名称

employee:类型名称

1:特定雇员的ID

检索文档

发送GET请求

GET /megacorp/employee/1

总结

将HTTP命令由PUT给成GET可以用来检索数据,DELETE命令来删除数据,以及HEAD命令来检查是否存在,如果像更新已经存在的数据,需要使用PUT命令

轻量搜索

GET /megacorp/employee/_search

可以获取搜索结果给最终用户所需的全部内容

GET /megacorp/employee/_search?q=last_name:Smith

可以检索关键字查询

使用查询表达式进行查询

GET /megacorp/employee/_search

{
    "query":{
        "match":{
            "last_name":"Smith"
        }
    }
}

此次查询不再使用query-string参数,而是一个请求体代替。这个请求使用JSON构造,并使用了match查询

三、springboot整合elasticSearch

  • 导入maven工程坐标

    <dependency>
    	<groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
    
  • springBoot默认使用springdata ElasticSearch模块进行操作

  • 两种方式操作ES

    • 原生的 SpringData ElasticSearch
    • jest操作(需要导入jest的工具包 io.searchbox.client.JestClient)

自动配置

SpringData ElasticSearch

  1. Client 节点信息clusterNodes; clusterName
  2. ElasticSearchTemplate 操作es
  3. 编写一个ElasticSearchRepository的子接口来操作ES

如何使用jest操作ES

  • 导入jest的工具包maven坐标

    <dependency>
    	<groupId>io.searchbox</groupId>
    	<artifactId>jest</artifactId>
        <version>5.3.3</version>
    </dependency>
    
  • 配置信息

    spring.elasticsearch.ject.uris=http://118.24.44.169:9200
    
  • 操作

    @Autowired
    JestClient jestClient;
    
    
    //添加操作
    public void contextLoad(){
        //给Es中索引一个文档  创建一个Article的Bean
        Article article = new Article();
        article.setId(1);
        article.setTile("好消息");
        
        //构建一个索引
        Index index = new index.Builder(article).index("guigu").type("news").build();
        
        //执行操作
        jestClient.execute(index);
    }
    
    //搜索操作
    public void search(){
        String json = "";
        
        Search s = new Search.Builder(json).addIndex("guigu").addType("news").build();
        
        Search result = jestClient.execute(s);
    }
    
    
    
    

四、整合SpringDataElasticSearch

springData ElasticSearch【ES版本有可能改变】

如果版本不适配,解决方案:

  • 升级springboot版本
  • docker安装对应版本的ES
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=118.24.44.169:9301

两种用法:

  1. 编写一个 ElasticsearchRepository

    public interface BookRepositoory implements ElasticsearchRepository<Book,Integer>{
        
    }
    
  2. 在Book上标注注解来识别 index等信息

    
    @Document(indexName = "guigu",type = "book")
    public class Book{
        Integer id;
        String bookName;
    }
    
  3. 操作

    @Autowrie
    BookRepository bookRepository;
    
    //添加操作
    public void test(){
        bookRepository.index(new Book());
    }
    
    //查询操作
    public void find(){
        //自定义内部的查询操作
    }
    

~

  1. 操作

    @Autowrie
    BookRepository bookRepository;
    
    //添加操作
    public void test(){
        bookRepository.index(new Book());
    }
    
    //查询操作
    public void find(){
        //自定义内部的查询操作
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值