全文检索-Elasticsearch-整合SpringBoot

news/2024/7/19 19:47:15 标签: elasticsearch, 全文检索, spring boot, 大数据

文章目录

  • 前言
  • 一、整合检索服务
    • 1.1 创建 gulimall-search 模块
    • 1.2 配置 Maven 依赖
    • 1.3 搜索服务注册到注册中心
    • 1.4 新增 es 配置类
    • 1.5 测试 RestHighLevelClient 组件
  • 二、存储数据到 ES
    • 2.1 测试 ES 简单插入数据
    • 2.2 测试 ES 查询复杂语句
    • 2.3 读入数据

前言

前面记录了 Elasticsearch 全文检索的入门篇和进阶检索。这次我们来讲下 Spring Boot 中如何整合 ES,以及如何在 Spring Cloud 微服务项目中使用 ES 来实现全文检索,来达到商品检索的功能。

一、整合检索服务

检索服务单独作为一个服务,就称作 gulimall-search 模块。

1.1 创建 gulimall-search 模块

在这里插入图片描述
点击 Next 勾选 Spring Web 依赖,点击 finish 即可

1.2 配置 Maven 依赖

1.添加 es 高阶客户端

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.4.2</version>
</dependency>

2.选择 java 和 elasticsearch 版本

<properties>
     <java.version>1.8</java.version>
     <elasticsearch.version>7.4.2</elasticsearch.version>
 </properties>

3.将之前的 common 包导入

<dependency>
    <groupId>com.atguigu.gulimall</groupId>
    <artifactId>gulimall-common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

添加完依赖后,我们就可以将搜索服务注册到 nacos 注册中心了。 nacos 注册中心的用法在前面几篇文章中也详细讲解过,这里需要注意的是要先启动 nacos 注册中心,才能正常注册 gulimall-search 服务。

1.3 搜索服务注册到注册中心

spring.application.name=gulimall-search
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

给启动类添加服务发现注解:@EnableDiscoveryClient,这样 gulimall-search 服务就可以被注册中心发现了。

因 common 模块依赖数据源,但 search 模块不依赖数据源,所以该模块需要移除数据源依赖,检索服务启动类如下

@EnableDiscoveryClient
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class GulimallSearchApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallSearchApplication.class, args);
    }

}

1.4 新增 es 配置类

@Configuration
public class ElasticsearchConfig {

    @Bean
    // 给容器注册一个 RestHighLevelClient,用来操作 ES
    // 参考官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.9/java-rest-high-getting-started-initialization.html
    public RestHighLevelClient restHighLevelClient() {
        return new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.57.129", 9200, "http")));
    }
}

1.5 测试 RestHighLevelClient 组件

@RunWith(SpringRunner.class)
@SpringBootTest
public class GulimallSearchApplicationTests {

    @Resource
    private RestHighLevelClient restHighLevelClient;

    @Test
    public void contextLoads() {
        System.out.println(restHighLevelClient);
    }

}

运行结果如下所示,打印出了 RestHighLevelClient。说明自定义的 ES Client 自动装载成功。

在这里插入图片描述

二、存储数据到 ES

2.1 测试 ES 简单插入数据

ElasticsearchConfig 安全配置

public static final RequestOptions COMMON_OPTIONS;
static {
    RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
//        builder.addHeader("Authorization", "Bearer " + TOKEN);
//        builder.setHttpAsyncResponseConsumerFactory(
//                new HttpAsyncResponseConsumerFactory
//                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
    COMMON_OPTIONS = builder.build();
}

测试类

/**
 * 测试存储数据到es
 * 更新也可以
 * @throws IOException
 */
@Test
public void indexData() throws IOException {
    IndexRequest index = new IndexRequest("users");
    index.id("1");
    //第一种:index.source("userName","zhangsan","age","18","gender","男");

    //第二种:
    User user = new User();
    user.setUserName("zhangsan");
    user.setAge(18);
    user.setGender("男");
    String jsonString = JSON.toJSONString(user);
    //要保存的数据
    index.source(jsonString, XContentType.JSON);
    //执行操作
    IndexResponse response = restHighLevelClient.index(index, ElasticsearchConfig.COMMON_OPTIONS);
    //提取有用的响应数据
    System.out.println(response);
}

@Data
class User{
    private String userName;
    private String gender;
    private Integer age;
}

控制台打印数据

在这里插入图片描述
测试数据存储到 es 成功

在这里插入图片描述

2.2 测试 ES 查询复杂语句

2.3 读入数据


http://www.niftyadmin.cn/n/313757.html

相关文章

python 调用c语言方法详解

Python是一种强大的编程语言&#xff0c; Python在代码的编写中可以使用任何一种编程语言&#xff0c;可以利用其内置函数或模块来完成自己的任务。但是在 Python中调用其他语言的程序时&#xff0c;需要有特定的环境&#xff0c;例如&#xff1a;C、C等。 在 python中调用其他…

Speechify: 在线文本转语音(TTS)网站

【产品介绍】 Speechify是一个基于人工智能技术的在线文本转语音&#xff08;TTS&#xff09;网站&#xff0c;可以让用户把任何文本转换成自然流畅的语音&#xff0c;从而提高阅读效率和理解能力。 Speechify有多种平台的应用&#xff0c;包括Chrome扩展、iOS应用、Android应用…

ASEMI代理LT8471IFE#PBF原装ADI车规级LT8471IFE#PBF

编辑&#xff1a;ll ASEMI代理LT8471IFE#PBF原装ADI车规级LT8471IFE#PBF 型号&#xff1a;LT8471IFE#PBF 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;TSSOP-20 批号&#xff1a;2023 引脚数量&#xff1a;20 工作温度&#xff1a;-40C~125C 安装类型&#xff1a;表面…

CodeArts持续发力输出,华为云重塑软件开发

配图来自Canva可画 互联网时代&#xff0c;软件技术对企业成功的助益越来越明显。不管是为了顺遂大众趋势&#xff0c;还是迫于生存压力&#xff0c;可以确定的是&#xff0c;目前各类软件的开发已经被纳入众多企业的发展规划当中。 只是&#xff0c;长期以来国内软件行业一直…

ant-design实现树的穿梭框,穿梭后右侧是已选树(一)

主要内容: 基于ant-design树的穿梭框&#xff0c;实现穿梭后右侧是已选树&#xff0c;&#xff08;当前antd右侧只有一个层级&#xff09; 理想的树的穿梭框&#xff1a; 左边是完整的树&#xff0c;右边是已选的树&#xff0c;左边已选穿梭到右边左边已选的消失&#xff0c;右…

618大促即将来临,速卖通、Lazada等平台如何快速提高排名和转化率?

速卖通每年三大促&#xff0c;328、618、双11。618马上就要来临&#xff0c;卖家朋友们都准备好了吗&#xff1f;今天陈哥就和大家聊聊怎么快速提高产品转化率。转化率是卖家在分析复盘时非常关键的因素&#xff0c;转化率的高低直接影响着卖家目前的关键词listing或者商品描述…

sentinel基本原理以及核心类介绍

Sentinel 核心类解析 架构图 ProcessorSlotChain Sentinel 的核心骨架&#xff0c;如上图结构&#xff0c;将不同的 Slot 按照顺序串在一起&#xff08;责任链模式&#xff09;&#xff0c;从而将不同的功能&#xff08;限流、降级、系统保护&#xff09;组合在一起。slot ch…

灾难恢复:支持业务连续性的策略——保证员工和客户始终可以访问关键数据和应用程序

灾难恢复&#xff1a;支持业务连续性的策略 保证员工和客户始终可以访问关键数据和应用程序。 为什么选择 NetApp 的业务连续性和灾难恢复解决方案&#xff1f; 保持弹性&#xff0c;自如操作 NetApp 就在您身边&#xff0c;在这样一个跌宕起伏的时期竭诚帮助您实现业务连续性…