es的搜索服务

news2024/11/20 23:15:00

1、在项目中,创建一个搜索服务的模块:search-service

 2、在新创建的搜索模块中添加依赖:

        <dependencies>
            <!--nacos-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
            <!--spring-boot提供的mvc-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- es-restclient-操作es-->
            <dependency>
                <groupId>org.elasticsearch.client</groupId>
                <artifactId>elasticsearch-rest-high-level-client</artifactId>
            </dependency>
            <!--feign-远程调用 -->
            <dependency>
                <groupId>com.hmall</groupId>
                <artifactId>feign-api</artifactId>
                <version>1.0</version>
            </dependency>
            <!--spring-boot封装的test测试-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
            <!--FastJson-字符串和json互相转换-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
            </dependency>
            <!-- amqp-高级消息队列协议 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-amqp</artifactId>
            </dependency>
            <!--apache提供的工具包-->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
            </dependency>
        </dependencies>

3、配置网关(配置搜索服务路由规则)

指的是在gateway网关模块的配置文件中配置搜索服务路由规则

gateway网关的配置详细可参考

http://t.csdn.cn/ueadT

        
- id: search-service  #路由id,自定义,只要不重复即可
          uri: lb://searchservice  #本路由对应的后台服务
          predicates:
            - Path=/search/**

4、启动es和kibana

安装es和kibana,详情可参考

http://t.csdn.cn/V6vXx

如果是在linux中使用docker已经安装过es和kibana

docker的相关命令可参考

http://t.csdn.cn/KaDih

启动成功后访问:

http://192.168.177.132:5601

5、设计并创建索引库

可以参考

http://t.csdn.cn/fLwxx

6、数据导入

把数据从mysql导入es有两种方式:

第一种:直接在es的代码上查询数据库的数据,用批处理的方式导入

 可以参考

http://t.csdn.cn/oGDGB

这种方式有两个问题:

1.没有做到单一职责,es直接调用数据库

2.如果数据量太大,容易出现问题

可以参考

http://t.csdn.cn/IZt9j

7、创建接收请求参数类

8、自动补全查询

详情也可参考:

http://t.csdn.cn/kW17T

controller层:

@Slf4j
@RestController
@RequestMapping("/search")
public class SearchController {
    @Autowired
    private IsearchService isearchService;

    /**
     * 搜索栏自动补全
     */
    @GetMapping("/suggestion")
    public List<String> getsSuggestion (@RequestParam ("key") String prefix){
        log.info("搜索栏自动补全===前后端联通==" + prefix);
        return this.isearchService.getsSuggestion(prefix);
    }

service层:

/**
     * 搜索栏自动补全
     */
    List<String> getsSuggestion(String prefix);

service实现类:

    /**
     * 搜索栏自动补全
     */
    @Override
    public List<String> getsSuggestion(String prefix) {
        try {
            // 1.准备Request
            SearchRequest request = new SearchRequest("item");
            // 2.准备DSL
            request.source().suggest(
                    new SuggestBuilder().addSuggestion(
                            "suggestions1",// 查询的名称,自定义
                            SuggestBuilders.completionSuggestion("suggestion")//自动补全的字段名
                                    .prefix(prefix)//关键字,查询以北京开头的数据
                                    .skipDuplicates(true)// 跳过重复词条
                                    .size(10)//显示的词条数量
                    ));
            // 3.发起请求
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            // 4.解析结果
            List<String> list = new ArrayList<>();
            Suggest suggest = response.getSuggest();
            // 4.1.根据补全查询名称,获取补全结果
            CompletionSuggestion suggestion1 = suggest.getSuggestion("suggestions1");
            // 4.2.获取options
            List<CompletionSuggestion.Entry.Option> options = suggestion1.getOptions();
            // 4.3.遍历
            for (CompletionSuggestion.Entry.Option option : options) {
                String term = option.getText().toString();
                list.add(term);
            }
            return list;
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

9、过滤项聚合功能

详情可参考

http://t.csdn.cn/M4Q9y

10、实现基本搜索功能

详情可参考

http://t.csdn.cn/L7WEl

11、数据同步

两种方式:两种方法都是用的mq的监听来实现的

第一种:es直接操作数据库

http://t.csdn.cn/XXdiw

第二种:使用feign远程调用的方式操作数据库

http://t.csdn.cn/fBfwn​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis-Plus中的逻辑删除使用

系列文章目录 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus分页查询&#xff08;快速上手运用&#xff09;_心态还需努力呀的博客-CSDN博客_mybatis plus分页查询 MyBa…

【ESXi 7.x 升 8.x】ESXi 升级 —— 使用 ESXCLI 升级 ESXi(Offline Bundle ZIP)

目录3.1 示例 — 使用 ESXCLI 升级 ESXi&#xff08;Offline Bundle ZIP&#xff09;【目标&#xff1a;将 ESXi 6.5 U2 GA 升级为 7.0 U3f】&#xff08;1&#xff09;下载离线升级ZIP包&#xff08;2&#xff09;升级 ESXi① 查看离线包② 升级前确认ESXi版本③ 获取升级用的…

[附源码]Python计算机毕业设计大学生社团管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

ChatGPT教程之 01 什么是ChatGPT革命性的对话生成新工具

今天,我想揭开 ChatGPT 的神秘面纱——GANs*(生成对抗网络)的一个迷人的新应用程序,它在 AI 社区中引起了很大的轰动。 对于那些不熟悉 GAN 的人来说,它们是一种神经网络,它使用两个相互竞争的网络——一个生成器和一个鉴别器——来创建逼真的输出。生成器创建假输出,而…

Paper Note——经典Polyline类型Map论文损失函数

文章目录1. Hierarchical Recurrent Attention Networks for Structured Online Maps2. DAGMapper: Learning to Map by Discovering Lane Topology1. Hierarchical Recurrent Attention Networks for Structured Online Maps https://patrick-llgc.github.io/Learning-Deep-Le…

QT(4)-QAbstractItemView

QAbstractItemView1 说明2 常用函数2.1 交替行颜色2.1.1 alternatingRowColors2.1.2 setAlternatingRowColors2.2 autoScroll2.2.1 hasAutoScroll2.2.2 setAutoScroll2.3 autoScrollMargin2.3.1 autoScrollMargin2.3.2 setAutoScrollMargin2.4 defaultDropAction2.4.1 setDefau…

python--飞机大战

实现功能&#xff1a; 1&#xff1a;飞机的移动&#xff0c;发射子弹&#xff0c;手雷&#xff0c;生命值&#xff0c;生命条 2&#xff1a;敌飞机有3种形态&#xff08;小&#xff0c;中&#xff0c;大&#xff09;不同的飞机大小不一样&#xff0c;生命值不一样&#xff0c…

基于springboot+mybatis+mysql+vue在线订餐系统

基于springbootmybatismysqlvue在线订餐系统一、系统介绍二、功能展示1.主页(用户)2.菜单(用户)3.用户注册(用户)4.用户登陆(用户)5.我的订单(用户)6.我的购物车(用户)7.首页(管理员)8.用户管理(管理员)9.商品管理(管理员)9.订单管理(管理员)10.评论管理(管理员)三、获取源码一…

c++ 类型的转换

文章目录1. C语言中的类型转换1.1 隐式转换1.2 显示转换2. C的类型转换2.1 static_cast2.2 reinterpret_cast2.3 const_cast2.4 dynamic_cast3. 常见面试题前言&#xff1a; C给出了四种类型转换&#xff0c;这是做出的一些规范&#xff0c;为了减少隐式转换。隐式转换的问题&a…

JDK19都出来了~是时候梳理清楚JDK的各个版本的特性了【JDK14特性讲解】

JDK各个版本特性讲解-JDK14特性 一、Java14概述 Oracle在2020年3月17日宣布JAVA14 全面上市,JAVA14通过每六个月发布一次新功能,为企业和开发人员社区提供增强功能,继续了Oracle加快创新的承诺. 最新的JAVA开发工具包提供了新功能,其中包括两项备受期待的新预览功能,实例匹配的…

【Redis】分布式限流与Redis实现限流的四种方式(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

MHA高可用及故障切换

目录 一、MHA的概述 1、 MHA的概念 2&#xff0e;MHA 的组成 3&#xff0e;MHA 的特点 二、搭建 MySQL MHA的操作步骤 1、实验思路&#xff1a; 1.1、MHA架构 1.2、故障模拟 2、环境准备 3、修改 Master、Slave1、Slave2 节点的主机名 4、修改 Master、Slave1、Slav…

基于java+springboot+mybatis+vue+mysql的农产品销售商城网站

项目介绍 农产品销售成为了很多农产品商家的一项重要的创收项目。传统的销售方式采用了摆摊销售和市场的农产品的批发&#xff0c;在销售农产品方面不是很方便&#xff0c;因此采用了网络的方式进行销售。也是电子商务发展今天的一种趋势&#xff0c;建立了网站&#xff0c;前…

WebSocket——SpringBoot+Vue3+TS+SockJS+STOMP简单连接使用

WebSocket——SpringBootVue3TSSockJSSTOMP简单连接使用本文视频以及相关资源关于WebSocket文档什么时候使用WebSocketWebSocket连接头服务器返回状态码客户端使用技术Github地址npm安装为什么要安装sockjs的.d.ts文件常用方法1.连接2.关闭连接3.发送消息4.设置订阅构建1.创建w…

【Redis】Redis布隆过滤器工作原理与实战(Redis专栏启动)

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

判断质数复习与分解质因数

TIPS 1. 之前我们讲到比方说要得到一个整数&#xff08;十进制形式&#xff09;的每一位数字&#xff0c;就需要把这个整数先%10得到最低位的数字&#xff0c;然后呢再把这个整数/10更新一下&#xff0c;然后呢就这么循环往复直到最终这个不断更新的整数为0跳出循环。那如果这…

深度学习-神经网络(Pytorch应用)

文章目录简介卷积层池化层激活层线性层前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 上图摘自网络 受生物神经网络的启发&#xff0c;每个神经元与其他神经元相连&#xff0c;当…

InfluxDB时序数据库-笔记-更新中

本笔记由在Bilibili学习的尚硅谷教学视频后整理得来 文章目录一、InfluxDB基础概念1.1InfluxDB是什么1.2为什么选择InfluxDB而不选择关系型数据库1.3下载安装1.4Promethus数据格式1.5时序数据中的数据模型1.6与时间标准相关的知识二、Flux语言2.1初识Flux语言2.2Flux基本语法三…

献上SpringBoot核心笔记,简直就是血赚

市面上真正适合学习的SpringBoot资料太少&#xff0c;有的书或资料虽然讲得比较深入&#xff0c;但是语言晦涩难懂&#xff0c;大多数人看完这些书基本都是从入门到放弃。学透SpringBoot难道就真的就没有一种适合大多数同学的方法吗&#xff1f; 很多SpringBoot相关的知识点与…

Java+MySQL学生选课与成绩管理系统(数据库版)

一、项目要求 学生选课与成绩管理系统(数据库版) 1、配置MySQL数据库 2、利用java+MySQL实现系统各个功能 3、功能包括: (1)系统交互界面,如下图所示 (2)学生信息的增删改查。学生属性包括学号(唯一),姓名,专业。 (3)课程信息的增删改查。课程属性包括编号…