当前位置: 首页 > news >正文

谷粒商城实战笔记-175~177-商城业务-检索服务-检索查询接口开发

文章目录

  • 一,175-商城业务-检索服务-检索查询参数模型分析抽取
  • 二,176-商城业务-检索服务-检索返回结果模型分析抽取
  • 三,177-商城业务-检索服务-检索DSL测试-查询部分
  • 四,178-商城业务-检索服务-检索DSL测试-聚合部分
  • 问题记录
    • 解决方案

搜索页面搭建完成之后,点击搜索按钮,发送参数给后台服务,后台服务根据参数从Elasticsearch中查询符合条件的数据,返回给前端。

一,175-商城业务-检索服务-检索查询参数模型分析抽取

根据前端的交互设计,将前端发送的请求参数解析、封装检索查询请求对象。

这一步骤在实际工作中非常重要,开发人员在开发详细设计阶段完成,并输出文档,后续依据文档完成开发。

package com.atguigu.gulimall.search.vo;import lombok.Data;import java.util.List;@Data
public class SearchParam {/*** 页面传递过来的全文匹配关键字*/private String keyword;/*** 品牌id,可以多选*/private List<Long> brandId;/*** 三级分类id*/private Long catalog3Id;/*** 排序条件:sort=price/salecount/hotscore_desc/asc*/private String sort;/*** 是否显示有货*/private Integer hasStock;/*** 价格区间查询*/private String skuPrice;/*** 按照属性进行筛选*/private List<String> attrs;/*** 页码*/private Integer pageNum = 1;/*** 原生的所有查询条件*/private String _queryString;}

二,176-商城业务-检索服务-检索返回结果模型分析抽取

这一节的主要内容是分析搜索响应的数据结构,根据实际业务和前端需求,将要返回给前端的内容分为如下几部分:

  • 检索到的产品信息
  • 分页信息
  • 汇总的产品的所有属性信息集合
  • 汇总的产品的品牌信息集合
  • 分类信息
package com.atguigu.gulimall.search.vo;import com.atguigu.common.es.SkuEsModel;
import lombok.Data;import java.util.List;@Data
public class SearchResult {/*** 查询到的所有商品信息*/private List<SkuEsModel> product;/*** 当前页码*/private Integer pageNum;/*** 总记录数*/private Long total;/*** 总页码*/private Integer totalPages;private List<Integer> pageNavs;/*** 当前查询到的结果,所有涉及到的品牌*/private List<BrandVo> brands;/*** 当前查询到的结果,所有涉及到的所有属性*/private List<AttrVo> attrs;/*** 当前查询到的结果,所有涉及到的所有分类*/private List<CatalogVo> catalogs;@Datapublic static class BrandVo {private Long brandId;private String brandName;private String brandImg;}@Datapublic static class AttrVo {private Long attrId;private String attrName;private List<String> attrValue;}@Datapublic static class CatalogVo {private Long catalogId;private String catalogName;}
}

以上是返回给前端的所有信息。

三,177-商城业务-检索服务-检索DSL测试-查询部分

这一节的主要内容是结合前端交互,编写后端的Elasticsearch的DSL语句。

涉及到Elasticsearch查询的开发,最佳的开发方式是先把DSL查询出来,然后转化为Java代码。

在编写ES查询DSL时,需要全文匹配的使用match query,其余的使用filter,因为全文匹配会有评分,精确匹配不需要评分,所以用filter,以提高查询性能。

GET gulimall_product/_search
{"query": {"bool": {"must": [{"match": {"skuTitle": "华为"}}],"filter": [{"term": {"catalogId": "225"}},{"terms": {"brandId": [1,2,9]}},{"nested": {"path": "attrs","query": {"bool": {"must": [{"term": {"attrs.attrId": {"value": "15"}}},{"terms": {"attrs.attrValue": ["海思(Hisilicon)","以官网信息为准"]}}]}}}},{"term": {"hasStock": true}},{"range": {"skuPrice": {"gte": 5000,"lte": 7000}}}]}},"sort": [{"skuPrice": {"order": "desc"}}],"from": 0,"size": 4,"highlight": {"pre_tags": ["<b style='color:red'>"],"post_tags": ["</b>"], "fields": {"skuTitle":{}}}
}

如果对DSL的语法比较熟悉,编写DSL难度并不大。

四,178-商城业务-检索服务-检索DSL测试-聚合部分

在搜索界面,点击搜索后,会展示如下的属性信息,以供用户进行点击查询,这些信息是在查询时根据产品信息汇总得到的,是实时的。

在这里插入图片描述

也就是说,我们还要在es查询结果基础上对数据进行汇总分析,可以使用ES提供的聚合分析完成这个需求。

GET gulimall_product/_search
{"query": {"match_all": {}},"aggs": {"brand_agg": {"terms": {"field": "brandId"},"aggs": {"brand_name_agg": {"terms": {"field": "brandName","size": 10}},"brand_img_agg": {"terms": {"field": "brandImg","size": 10}}}},"catelog_agg": {"terms": {"field": "catalogId"},"aggs": {"catelog_name_agg": {"terms": {"field": "catalogName","size": 10}}}},"attr_agg":{"nested": {"path": "attrs"},"aggs": {"attr_id_agg": {"terms": {"field": "attrs.attrId","size": 10},"aggs": {"attr_name_agg": {"terms": {"field": "attrs.attrName","size": 10}},"attr_value_agg": {"terms": {"field": "attrs.attrValue","size": 10}}}}}}},"size": 0
}

问题记录

在kibana上执行搜索请求时,后台服务报错,报错信息如下。

{"error" : {"root_cause" : [{"type" : "query_shard_exception","reason" : "failed to create query: Cannot invoke \"org.wltea.analyzer.dic.DictSegment.match(char[], int, int)\" because \"org.wltea.analyzer.dic.Dictionary.singleton._StopWords\" is null","index_uuid" : "2y1rV0AxTEO-0b3NW_7vyA","index" : "gulimall_product"}],"type" : "search_phase_execution_exception","reason" : "all shards failed","phase" : "query","grouped" : true,"failed_shards" : [{"shard" : 0,"index" : "gulimall_product","node" : "xUhfiZFBQlC5T8RerthrhQ","reason" : {"type" : "query_shard_exception","reason" : "failed to create query: Cannot invoke \"org.wltea.analyzer.dic.DictSegment.match(char[], int, int)\" because \"org.wltea.analyzer.dic.Dictionary.singleton._StopWords\" is null","index_uuid" : "2y1rV0AxTEO-0b3NW_7vyA","index" : "gulimall_product","caused_by" : {"type" : "null_pointer_exception","reason" : "Cannot invoke \"org.wltea.analyzer.dic.DictSegment.match(char[], int, int)\" because \"org.wltea.analyzer.dic.Dictionary.singleton._StopWords\" is null"}}}]},"status" : 400
}

在这里插入图片描述
原因是安装的IK分词器不能正常工作。

之前是使用命令进行自动安装。

bin/elasticsearch-plugin install https://get.infini.cloud/elasticsearch/analysis-ik/7.13.0

这种安装方式是有缺陷的,缺失配置文件相关。

应该手动安装。

解决方案


/mydata/elasticsearch/plugins目录下创建ik目录,cdik目录下。


下载IK分词器。

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.13.0/elasticsearch-analysis-ik-7.13.0.zip


解压压缩包。

unzip elasticsearch-analysis-ik-7.13.0.zip


重启Elasticsearch容器。

docker restart elasticsearch

相关文章:

谷粒商城实战笔记-175~177-商城业务-检索服务-检索查询接口开发

文章目录 一&#xff0c;175-商城业务-检索服务-检索查询参数模型分析抽取二&#xff0c;176-商城业务-检索服务-检索返回结果模型分析抽取三&#xff0c;177-商城业务-检索服务-检索DSL测试-查询部分四&#xff0c;178-商城业务-检索服务-检索DSL测试-聚合部分问题记录解决方案…...

爬虫 Web Js 逆向:RPC 远程调用获取加密参数(1)WebSocket 协议介绍

RPC (Remote Procedure Call) 是远程调用的意思。 在 Js 逆向时&#xff0c;本地可以和浏览器以服务端和客户端的形式通过 WebSocket 协议进行 RPC 通信&#xff0c;这样可以直接调用浏览器中的一些函数方法&#xff0c;不必去在意函数具体的执行逻辑&#xff0c;可以省去大量…...

【安卓】WebView的用法与HTTP访问网络

文章目录 WebView的用法使用http访问网络使用HttpURLConnection使用OkHttp 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。 点击跳转到网站。 WebView的用法 新建一个WebViewTest项目&#xff0c;然后修…...

Mysql中文存入乱码???

问题描述 提示&#xff1a;用的mysql5.x版本&#xff1a; 例如&#xff1a;在新增数据的时候&#xff0c;数据库本应该保存中文的字段出现了乱码&#xff1f;&#xff1f;&#xff1f;&#xff1a; 原因分析&#xff1a; 提示&#xff1a;首先想到的是mysql的字符集设置&…...

安美数字酒店宽带运营系统 weather.php 任意文件读取漏洞复现

0x01 产品简介 HiBOS酒店宽带运营系统是由安美世纪(北京)科技有限公司开发的一套专为酒店设计的宽带管理系统。该系统旨在提升酒店宽带服务的运营效率和安全性&#xff0c;为酒店客人提供稳定、高速、便捷的上网体验。 0x02 漏洞概述 安美数字酒店宽带运营系统 weather.php …...

BGP的反射器(四)

解决IBGP全互联问题带来的问题&#xff1a; 路由器需维护大量的TCP和BGP连接&#xff0c;尤其在路由器数量较多时AS内BGP网络的可扩展性较差 角色 RR&#xff1a;路由反射器Client&#xff1a;RR的客户端Non-Client&#xff1a;非客户机 关系 Client只与RR之间建立IBGP会话…...

proxy负载均衡

endpoint &#xff1a; 终点、终端 看service服务器的ip kubectl get ep backend -> real server &#xff1a;真正提供web服务的服务器 负载均衡器 load balancer --》LB USER -->LB --->BACKEND(real server) nginx SERVICE --->很多的endpoint--》po…...

两个若依系统,不能同时登录问题解决方案

原因&#xff1a; 问题根源在于两个独立的系统&#xff08;A系统与B系统&#xff09;共享了同一cookie键名来存储各自用户的认证令牌&#xff08;token&#xff09;。这种设计导致了以下情形&#xff1a; 当用户在A系统登录后&#xff0c;一个token被存储在cookie中&#xff0…...

Unity Render Streaming项目实践经验

UnityRenderStreaming项目 项目github地址见上,我使用项目的3.1.0-exp.7版本、Unity 2023.1.0版本、windows11运行。 1下载项目包 2在Unity Hub中打开RenderStreaming~文件夹 3在package manager中导入com.unity.renderstreaming package 因为已经下载过了就选择install pa…...

Rvt/dgn格式的模型如何提取外轮廓,用于压平倾斜模型或者地形,进行BIM+GIS融合

0序 很多设计院、施工单位都需要做BIMGIS的融合&#xff0c;把设计成果或者施工方案和现状实景做叠加。 BIM作为设计模型和现状的实景是不吻合的&#xff0c;多数都需要在现状的基础上进行改造&#xff0c;穿过村落的桥梁&#xff0c;已有立交的跨域等。为了更好的展示设计方案…...

sqli-labs-master靶场通关

目录 一、sqli-labs第一关 1.判断是否存在sql注入 &#xff08;1&#xff09;提示输入数字值的ID作为参数&#xff0c;输入?id1 &#xff08;2&#xff09;通过数字值不同返回的内容也不同&#xff0c;所以我们输入的内容是带入到数据库里面查询了 &#xff08;3&#xff0…...

hive sql 处理多层 json 数组

1. 背景 json 字符串值数据示例&#xff1a; {"score": 1,"submitTime": 1712491933,"answerFlag": 1,"groupId": 1755547960,"answers": [{"value": "[1, 2, 3]","ids": [4,5,6],"is…...

Dom 元素转换 Image 图片 (截图)

Dom 元素转换 Image 图片 (截图) dom-to-image dom-to-image NPM 官网文档 参考文章码上行舟 dom-to-image 是如何将 html 转换成图片的(文章参考) 安装 npm install dom-to-image --save 使用 /* in ES 6 */ import domtoimage from "dom-to-image"; /* in ES 5 *…...

零售业务产品系统应用架构设计(二)

ETC信用结算系统根据《加快推进高速公路电子不停车快捷收费应用服务实施方案》(发改基础〔2019〕935号),拓宽ETC发行服务渠道。推动建立全网协同服务模式,完善服务规则,鼓励银行业金融机构、非银行支付机构和互联网企业等服务机构紧密合作。允许ETC绑定既有银行账户和支付…...

Linux速成入门教程——从零基础开始快速入门,一文了解Linux用户管理与权限

2.1 用户与组管理 用户与组的基本概念 在Linux系统中&#xff0c;用户和组是管理权限和资源访问的基本单元。每个用户都有一个唯一的用户ID&#xff08;UID&#xff09;&#xff0c;每个组都有一个唯一的组ID&#xff08;GID&#xff09;。用户可以属于一个或多个组&#xff…...

网工内推 | 宁德时代IT运维,晋升空间大,带薪年假,包吃包住

01 宁德时代 &#x1f537;招聘岗位&#xff1a;IT运维服务 &#x1f537;任职要求 1、大专及以上学历专业不限&#xff0c;应届毕业生或计算机、网络维护等相关专业优先&#xff1b; 2、具备较强的服务意识和良好的语言表达能力、沟通能力、记忆能力、心理承受能力和学习能力…...

Linux---系统安全

文章目录 系统安全系统账号清理密码安全控制命令历史限制终端自动注销如设置时间短的处理方式 使用su命令切换用户用途及用法密码验证限制使用su命令的用户查看su操作记录限制使用su命令的用户查看su操作记录su命令的安全隐患 PAM(Pluggable Authentication Modules)可插拔式认…...

手写数字识别实战

全部代码&#xff1a; import matplotlib.pyplot import torch from torch import nn # nn是完成神经网络相关的一些工作 from torch.nn import functional as F # functional是常用的一些函数 from torch import optim # 优化的工具包import torchvision from matplotlib …...

二叉树遍历

二叉树的遍历是二叉树操作中的一个基本且重要的概念&#xff0c;它指的是按照一定的规则访问二叉树中的每个节点&#xff0c;并且每个节点仅被访问一次。常见的二叉树遍历方式有四种&#xff1a;前序遍历&#xff08;Pre-order Traversal&#xff09;、中序遍历&#xff08;In-…...

uni app 调用前置摄像头

uniapp开发app并没有相关Api调用前置摄像头。只能使用5app的api 调用前置摄像头拍照 plus.camera.getCamera(index) 获取需要操作的摄像头对象&#xff0c;如果要进行拍照或摄像操作&#xff0c;需先通过此方法获取摄像头对象 index指定要获取摄像头的索引值&#xff0c;1表…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...