【系统架构师-案例题-软件架构(架构风格、系统架构)-分布式系统(高)】Web Elasticsearch分词的商品推荐系统

文章目录

一、题目

某电商企业计划开发一款商品推荐系统,并接入微信小程序,以提升用户购物体验,增加商品销量。该企业组建了项目团队,团队成员包括项目经理、架构师、开发工程师、测试工程师等。在技术选型方面,架构师经过调研和评估,选择了 Elasticsearch 作为搜索引擎,利用其强大的分词功能和分布式架构,实现对海量商品数据的高效存储和检索。

1、(6分)Elasticsearch中内置了很多分词器,请用150字说明Simple, Whitespace, Keyword 分词引擎的特点差异。

2、(12分)请根据下图所示的商品推荐系统架构图,将下列名称填写空白处的内容(原题是红色标注处挖空)。

(1)、接入层、

(2)、显示层、

(3)、应用层、

(4)、业务逻辑层、

(5)、控制层、

(6)、网络层、

(7)、数据访问层、

(8)、数据层、

(9)、Mybatis,

(10)、Nginx,

(11)、 Flink,

(12)、Javascript,

(13)、Node.js,

(14)、RESTful,

(15)、Elasticsearch,

(16)、kafka

3、(7分)该方案中使用了RESTful风格,请用150字描述如何使用前后端分离如何实现RESTful。



二、完整答案

第1题:4种分词器特点差异

分词器 核心特点与分词规则
Standard分词器 Elasticsearch默认分词器: • 英文场景:按单词切分,自动将大写字母转换为小写,过滤标点符号 • 中文场景:仅简单将中文文本拆分为单个汉字,无完整语义分词能力
Simple分词器 按照非字母字符(如标点符号、数字、特殊字符等)进行切分,同时会将大写字母转换为小写,并过滤掉所有非字母字符,仅保留纯字母单词
Whitespace分词器 仅按照空白字符(如空格、制表符等)进行切分,不会进行小写转换,也不会过滤任何字符(标点符号、数字完整保留)
Keyword分词器 不进行任何切分,将输入的整个字符串作为一个单独的词(关键词)来处理,适用于精确匹配场景

第2题:架构图填写(8个空完整答案)

答案:(1)显示层(2)控制层(3)JavaScript(4)RESTful(5)业务逻辑层(6)数据层(7)MyBatis(8)Nginx


第3题:RESTful架构实现前后端分离的原理

RESTful架构通过定义一套标准化规范,从资源定义、交互协议、职责划分等维度彻底解耦前后端,实现前后端分离,核心要点如下:

  1. 资源定义与URL规范:在RESTful架构中,每种URL唯一代表一种系统资源。通过不同的HTTP请求方法(GET、POST、PUT、DELETE)对同一URL进行操作,即可实现对该资源的获取、添加、修改和删除,实现接口语义化。
  2. 请求方式与响应格式:客户端使用标准的HTTP方法对服务器上的资源进行操作,服务器响应通常以JSON格式返回数据,前后端仅通过数据交互,不耦合页面渲染逻辑。
  3. 前后端职责分离:前端主要负责用户界面与用户体验(页面展示、渲染、交互),通过发送Ajax请求与后端交互,仅做数据展示;后端专注于业务逻辑处理与数据存储,接收请求、处理业务后返回数据,不关心前端实现形式。
  4. 前后端交互规范:前后端通过RESTful规范进行数据交互,双方遵循相同的接口定义、请求方法和响应格式,可独立开发、独立部署、独立维护,大幅提升团队协作效率与系统可扩展性。

三、完整解析

第1题解析

Elasticsearch的分词器(Analyzer)是全文检索的核心组件,负责将文本拆分为可索引的词条(Term),4种分词器的设计场景完全不同:

  • Standard:默认通用分词器,适合英文常规检索,中文场景仅能做单字拆分,实际业务中需搭配IK等中文分词器使用;
  • Simple:适合纯英文文本检索,自动过滤非字母内容,避免标点、数字干扰;
  • Whitespace:适合需要保留原格式、按空格切分的场景(如日志、特定格式文本);
  • Keyword:适合ID、分类名、标签等需要精确匹配的字段,不做任何拆分,保证检索准确性。

第2题解析

该架构是典型的前后端分离+微服务的互联网系统架构,分层设计遵循「高内聚、低耦合」原则,各层职责清晰:

  1. 接入层:系统的用户入口,本场景为微信小程序,也可扩展为Web、APP等多端入口;
  2. 界面层:前端核心层,负责页面渲染、用户交互,HTML构建页面结构,Vue/React作为前端框架,TypeScript最终编译为JavaScript运行;
  3. 基础服务层:前端运行与部署的支撑层,Nginx做反向代理、负载均衡,Webpack打包前端资源,Node.js支撑前端运行/服务端渲染;
  4. 通信层:前后端交互的标准协议,HTTP是Web系统的通用协议,RESTful是接口设计的规范;
  5. 业务逻辑层:后端核心层,Java是企业级后端主流语言,Spring Cloud用于微服务治理,MyBatis作为持久层框架;
  6. 数据层:数据存储与检索层,MySQL存储结构化业务数据,Redis做缓存加速热点数据,Elasticsearch负责商品分词检索与推荐,是本系统的核心组件;
  7. 开发工具层:辅助开发的工具集,Git做版本控制,Maven做项目构建,题目说明无需填写。

第3题解析

前后端分离的核心是解耦,RESTful架构通过标准化规范实现了彻底解耦:

  • 传统单体架构中,前后端代码耦合在同一项目中,前端修改需后端重新部署,技术栈绑定;
  • RESTful架构下,前后端仅通过接口契约交互,前端可自由选择Vue/React/小程序等技术栈,后端可自由选择Java/Go等语言,双方可并行开发、独立部署;
  • 同时,RESTful的无状态特性、标准化HTTP方法,让接口具备通用性,可同时支持多端接入,大幅提升系统的可扩展性与维护性。
相关推荐
小码哥_常1 小时前
安卓开发秘籍:解锁10大性能优化秘诀
前端
try2find3 小时前
打印ascii码报错问题
java·linux·前端
郑州光合科技余经理3 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
冰暮流星4 小时前
javascript事件案例-全选框案例
服务器·前端·javascript
AI木马人4 小时前
13.【多租户架构实战】如何让一个AI系统同时服务多个用户且数据完全隔离?(完整设计方案)
人工智能·架构
Csvn4 小时前
前端性能优化实战指南
前端
Moment4 小时前
2026 年,AI 全栈时代到了,前端简历别再只写前端技术了 🫠🫠🫠
前端·后端·面试
糯米团子7494 小时前
Web Worker
开发语言·前端·javascript
freewlt5 小时前
React Server Components 深度解析
前端·react.js·前端框架
wordbaby5 小时前
一次跨端 Loading 卡死复盘:把请求计数从 Axios 拦截器迁到 try/catch/finally
前端·axios