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

SpringCloud微服务开发(六)ElasticSearch/RESTful风格

目录

1.初识elasticsearch

2.RESTful风格

3.倒排索引——根据分词建立索引

4.IK分词器


对于一个电商项目来说,商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的,底层原理是B+树索引,存在很多问题。

首先,查询效率较低。由于数据库模糊查询不走索引,在数据量较大的时候,查询性能很差。需要注意的是,数据库模糊查询随着表数据量的增多,查询性能的下降会非常明显,而搜索引擎的性能则不会随着数据增多而下降太多。

其次,功能单一。数据库的模糊搜索功能单一,匹配条件非常苛刻,必须恰好包含用户搜索的关键字。而在搜索引擎中,用户输入出现个别错字,或者用拼音搜索、同义词搜索都能正确匹配到数据。综上,在面临海量数据的搜索,或者有一些复杂搜索需求的时候,推荐使用专门的搜索引擎来实现搜索功能。

目前在行业内elasticsearch最为流行。elasticsearch是一款非常强大的开源搜索引擎,支持的功能非常多。‍‬‍‌​‌‌‬⁠‍​​‍‌​​‌​​‬​‍⁠‬‍‌​⁠​​‍​​​​​‍‍‌​⁠⁠‬​‍‍​day08-Elasticsearch - 飞书云文档

1.初识elasticsearch

Elasticsearch是由elastic公司开发的一套搜索引擎技术,它是elastic技术栈中的一部分。完整的技术栈包括:

  • Elasticsearch:用于数据存储、计算和搜索
  • Logstash/Beats:用于数据收集
  • Kibana:用于数据可视化

整套技术栈被称为ELK

安装:Elasticsearch01-02.初识ES-认识和安装ES_哔哩哔哩_bilibili

2.RESTful风格

在后端开发中,RESTful 风格(Representational State Transfer)是一种常用于设计网络应用程序的架构风格。它基于 HTTP 协议,使用 HTTP 方法(如 GET、POST、PUT、DELETE 等)来操作资源,以实现客户端与服务器之间的通信。

RESTful 风格的关键概念:

资源(Resources):在 RESTful 架构中,"资源" 是指可以通过 URI 来标识的对象或数据实体。例如,/users 代表用户资源,/products 代表产品资源;每个资源都有一个唯一的 URI,客户端通过访问这些 URI 来获取、修改或删除资源

HTTP 方法:RESTful 风格依赖于 HTTP 方法来定义对资源的操作:

  • GET:用于获取资源。请求时不应有副作用
  • POST:用于创建新的资源。一般用于提交表单或上传数据
  • PUT:用于更新现有资源。将一个完整的资源替换成新的版本
  • UPDATE:用于部分更新现有资源,仅更新部分数据
  • DELETE:用于删除资源

每个 HTTP 方法与相应的操作(如获取、创建、修改、删除)对应

无状态性(Stateless):每个请求都包含了足够的信息,使得服务器能够理解并响应请求。服务器不需要保存客户端的状态。每个请求都是独立的,且服务器不保存关于客户端的信息(例如,用户认证信息),这些信息通常会包含在每个请求的头部或请求体中

统一接口(Uniform Interface):RESTful 风格要求有统一的接口规范,保证了不同客户端可以使用相同的接口与服务器通信。这种统一性使得系统的扩展和维护变得更加容易。例如,资源的 URI 格式应保持一致,HTTP 动词的使用应具有一致性。

表现层(Representation):在 REST 中,资源的状态通过某种形式的表现(如 JSON、XML 等)返回给客户端。客户端通过与这些表现层交互来操作资源。例如,获取某个用户的信息,返回的可能是该用户的 JSON 数据。

3.倒排索引——根据分词建立索引

文档和词条:每一条数据就是一个文档,对文档中的内容分词,得到的词语就是词条
正向索引:基于文档id创建索引,查询词条时必须先找到文档,而后判断是否包含词条
倒排索引:对文档内容分词,对词条创建索引,并记录词条所在文档的id。查询时先根据词条查询到文档id,而后根据文档id查询文档

4.IK分词器

中文分词往往需要根据语义分析,比较复杂,这就需要用到中文分词器,例如IK分词器。IK分词器是林良益在2006年开源发布的,其采用的正向迭代最细粒度切分算法一直沿用至今。其安装的方式也比较简单,只要将资料提供好的分词器放入elasticsearch的插件目录即可:


http://www.kler.cn/a/447465.html

相关文章:

  • 高效处理PDF文件的终极工具:构建一个多功能PDF转换器
  • 使用Python开发高级游戏:创建一个3D射击游戏
  • python如何获取excel单元格文字是否加粗
  • WebRTC服务质量(06)- 重传机制(03) NACK找到真正的丢包
  • YOLOv8全解析:高效、精准的目标检测新时代——创新架构与性能提升
  • Mamba安装环境和使用,anaconda环境打包
  • 如何在Qt中应用html美化控件
  • 进入 Cosmic Red:第十周游戏指南
  • Linux中的mv命令深入分析
  • RAG开发中,如何用Milvus 2.5 BM25算法实现混合搜索
  • 如何深入学习JVM底层原理?
  • 火山引擎声音复刻API-2.0
  • 【从零开始入门unity游戏开发之——C#篇18】C#面向对象的封装——构造函数、`this()`构造函数链、析构函数(方法)
  • 如果模块请求http改为了https,测试方案应该如何制定,修改
  • 云手机:小红书矩阵搭建方案
  • 电商新品发布自动化:RPA 确保信息一致性与及时性【rap.top】
  • WPF制作图片闪烁的自定义控件
  • 科研篇——《吕达仁:科研真问题从何而来》
  • volatility2工具的使用vol2工具篇
  • 青少年编程与数学 02-004 Go语言Web编程 09课题、访问数据库
  • define ATL_NO_VTABLE __declspec(novtable)
  • 时间序列预测论文阅读和相关代码库
  • 基于Spring Boot的找律师系统
  • spring事件机制笔记、发布和监听
  • Keil MDK下载程序后MCU自动重启设置
  • ElasticSearch 数据同步