谷粒商城-全文检索-ElasticSearch

1.简介

一个分布式的开源搜索和分析引擎,可以 秒 级的从海量数据中检索

主要功能:做数据的检索和分析(MySQL专攻于数据的持久化存储与管理CRUD达到百万以上的数据MSQL就会很慢,海量数据的检索和分析还是要用ElasticSearch)

用途:我们电商项目里的所有的检索功能都是由ElasticSearch完成的

底层:开源库 Lucene ,然后对 Lucene 进行封装,提供了 REST API 接口,开箱即用

REST API: 天然的跨平台

版本对应:

1.基本概念

类比MySQL:

1.Index(索引)

1.动词:类似于MySQL的insert: 创建一条数据在 ElasticSearch 里叫 索引一条数据

2.名词:类似于MySQL的Database

2.Type(类型) (es7以后不能再创建多个type,只能用默认的,已被弃用)

在 Index 中可以定义一个或者多个 Type

类似于MySQL 数据库 和 表 的关系:MySQL里叫在某个数据库的某张表里,在ES里叫某个索引的某个类型下

已经没有type了 现在索引就是表 索引还有映射  然后索引库里边存的就是文档了.......

3.Document(文档)

保存在某个索引(Index)下,某种类型(Type)的一个数据(Document),文档是JSON格式的,Document就像是 MySQL中的某个Table 里面的内容;

4.倒排索引

比如我们保存一条记录:红海行动

ES会先把 红海行动 进行分词,比如分成 红海 和 行动 两个单词,除了存入1号记录 红海行动 这个文档之外,额外又维护了一张 倒排索引表 :倒排索引表就会存 红海 1,行动 1,两个文档

然后我们再来保存2号记录 探索红海行动

先分词成: 探索 红海 行动 ,先存入2号记录 探索红海行动 ,再额外维护 倒排索引表 更新 红海 和 行动的记录 加入 探索 的记录 :红海 1,2 和 行动 1,2 和 探索 2 

以此类推....

然后当我们检索时 输入 红海特工行动 它也会分词成为 红海 特工 行动 三个单词,然后会从倒排索引表里找到 红海 特工 行动  这三个词的记录 就会查到 12345条记录,但是哪一个才是更贴和我们的搜索目标呢,引入一个相关性得分(比如3号记录共有3个单词命中了两个,相关性得分2/3),我们就会根据相关性得分从高到低排序

2.Docker安装(国内镜像已经停用了,解决谷粒商城docker pull的问题)

替换视频中的docker镜像,直接装在centOS7上

在CentOS 7上安装和配置Elasticsearch的方法_centos7搭建elasticsearch-CSDN博客

然后要在elasticsearch.yml上添加这个配置: http.host: 0.0.0.0

然后安装kibana:

参考这个博主:

CentOS 7 上安装 Kibana 7.12.1_kibana 7.12.1 license-CSDN博客

做完这两个博主的内容就能跳过视频P104

3.初步检索

因为封装成 REST API,我们直接使用APIfox发请求就能用

1._cat

GET/_cat/nodes:查看所有节点


GET/_cat/health:查看 es 健康状况


GET/_cat/master:查看主节点


GET/ cat/indices:查看所有索引 相当于MySQL里的show databases;

2.索引一个文档(保存)

因为ES8以后不能创建多个type所以我们用到的请求是

emmmES7应该只是化了type的概念,跟着视频里应该也可以,因为我们这里装的是7.9.2的ES

我建议还是使用post发/_doc吧,以后会慢慢更新淘汰掉视频里的语法的

视频中的方法:

POST:

3.查询文档(乐观锁)

乐观锁,当他们并发发送请求的时候,可以加上判断条件if_seq_no=3,当seq_no=3时才能操作成功,且成功后seq_no会改变,当另一条请求也带上判断条件if_seq_no=3时,操作就会失败

模拟并发更改:

同时对id为1的数据发送put请求更改name:

当第一条请求带上乐观锁操作发出去且seq_no=3时

此时再发送第二条请求也带上乐观锁操作让seq_no=3时:

4.更新文档

POST:

当带了_update 语法一定要带上 doc

_update会对比原数据,如果本次传的数据和原数据一模一样,版本号就不会加,操作就是noop(没有操作),序列号(_seq_no)也不变

不带_update 语法不加 doc://等同于PUT不加_update

不会检测原数据直接更新,版本号,序列号都会加

5.删除文档

6.bulk批量API

必须发POST请求

来到Kiana

批量保存测试数据:

es测试数据.json · 坐看云起时/common_content - Gitee.com

4.进阶检索

1.SearchAPI

ES 支持两种基本方式检索

        一个是通过使用 REST request URl 发送搜索参数(uri+检索参数)

        另一个是通过使用 REST requestbody 来发送它们(uri+请求体)

2.Query DSL(查询领域对象语言)上面第二种方法的请求体

1.基本语法格式

2.只返回部分字段

"_source":["name","age"],只返回name和age字段

3.match匹配查询

match,条件查询指定的是一个非字符串的属性,就是精确查询

当指定的是字符串的属性就是模糊查询:(全文检索)(倒排索引),最终会按照评分去进行排序,会对检索的字符串进行分词

4.match_phrase(短语匹配)

对字符串不进行分词(精确查询)

5.multi_match(多字段匹配)

6.bool(复合查询)

must:必须满足,

must_not:必须不满足

should:应该,满足最好,不满足也行(满足了加评分,会排在前面)

7.filter(结果过滤)

不会贡献文档的相关性得分

不用filter:

用了filter

8.term

类似于match,term用来找精确值字段,例如age

match用来全文检索,字符串模糊查询用,例如address

文本用match,数字用term

另外,区别 match_phrase 和 属性名.keyword :

9.aggregations(执行聚合)

分析和检索是一次性的:一次请求过去,我们既能查出数据,也能把数据分析到位

例如需求是:搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄,但不显示这些人的详情。

先看看查出所有 address 中包含 mill 的所有人, 并列举出他们的年龄分布

再加一个平均值聚合

如何不看这些人的详细信息呢,我们让size=0,就可以只看聚合结果:

进阶:子聚合 按照年龄聚合,并且请求这些年龄段的这些人的平均薪资

就可以查到如下结果:

再进阶:查出所有年龄分布,并且这些年龄段中M(男)的平均薪资和F(女)的平均薪资以及这个年龄
段的总体平均薪资

3.Mapping映射

定义一个文档如何被进行处理的:例如我们可以定义那个string类型的字段是可以被当作全文检索的

像是创建SQL表时定义每一列数据类型是什么

1.字段类型

ES会在第一次保存数据的时候自动猜测数据类型

2.映射

就是每一个文档的数据类型是什么

我们可以查看mapping信息

我们也可以在创建索引时指定映射(有很多类型,可以参考文档)

1.修改映射

1.添加新的字段映射:

2.修改已经存在的字段

对于已经存在的映射字段,我我们是不能更新的

3.数据迁移

因为映射不支持修改,我们想要修改,能用的办法就是新建一个映射字段,把数据迁移进去:

先创建一个新索引

下一步数据迁移:

这是没有type的写法

4.分词

一个  tokenizer(分词器)  接收一个字符流,将之分割为独立的 tokens(词元,通常是独立的单词),然后输出 tokens 流。例如,whitespace tokenizer遇到空白字符时分割文本。它会将文本"Quick brown fox!"分割为 [Quick, brown, fox!]。
该 tokenizer(分词器)  还负责记录各个term(词条) 的顺序或 position 位置(用于 phrase 短语和 word proximity词近邻查询),以及 term(词条)所代表的原始word(单词)的 start(起始)和 end(结束)的 characteroffsets(字符偏移量)(用于高亮显示搜索的内容)。

Elasticsearch提供了很多内置的分词器,可以用来构建custom analyzers(自定义分词器)

为虚拟机的elasticsearch装ik分词器:

找到Releases · infinilabs/analysis-ik · GitHub对应的版本(我用的7.9.2)

解压放在ik文件夹里放进plugins目录下,重启elasticsearch服务

测试分词:

创建自定义词库:

下载nginx:

CentOS7下安装NGINX_centos7下载nginx-CSDN博客,跟着这个步骤来,记得开防火墙的80端口,然后在/usr/local/nginx/html这个路径下新建es文件夹,fenci.txt,会出现乱码问题,后续解决;

配置ik分词器的远程词库地址:

来到ik的config文件夹:

至此,新词就可以添加进/usr/local/nginx/html/es文件夹下的fenci.txt

5.Elasticsearch-Rest-Client

新建模块:

修改配置文件,添加依赖:

新建config包,

添加common依赖,配置nacos注册中心:

启用服务注册发现:

引入ElasticSearch-Rest-Client的步骤;

1.在pom文件里导入依赖

2.给容器中注入一个RestHighLevelClient

3.参照官方API进行操作:Java High Level REST Client | Java REST Client [7.17] | Elastic

RequestOptions:请求设置项:

开始测试:

1.index:(保存更新都可以)

2.复杂检索:

1.先构造一个检索请求searchRequest

2.构造检索条件:

query条件构造:

聚合条件构造:嵌套使用 .subAggregation()

获取查询结果:

获取分析数据:

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

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

相关文章

STM32智能城市交通管理系统教程

目录 引言环境准备智能城市交通管理系统基础代码实现:实现智能城市交通管理系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景:城市交通管理与优化问题解决方案与优化收尾与总结 1. 引言 智能城…

用EXCEL和python 计算马尔可夫链转移矩阵

目录 目标:用EXCEL和python 计算马尔可夫链转移矩阵 1 用EXCEL计算 1.1 马尔可夫链的基本应用 1.2 具体计算 2 用python计算马尔可夫转移矩阵 2.1 py代码 2.2 运行结果 3 上面2者计算结果相同 目标:用EXCEL和python 计算马尔可夫链转移矩阵 1 用…

<数据集>混凝土缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:7353张 标注数量(xml文件个数):7353 标注数量(txt文件个数):7353 标注类别数:6 标注类别名称:[exposed reinforcement, rust stain, Crack, Spalling, Efflorescence…

StarRocks on AWS Graviton3,实现 50% 以上性价比提升

在数据时代,企业拥有前所未有的大量数据资产,但如何从海量数据中发掘价值成为挑战。数据分析凭借强大的分析能力,可从不同维度挖掘数据中蕴含的见解和规律,为企业战略决策提供依据。数据分析在营销、风险管控、产品优化等领域发挥…

PHP房产中介租房卖房平台微信小程序系统源码

​🏠【租房卖房新选择】揭秘房产中介小程序,一键搞定置业大事!🏡 🔍【开篇:告别繁琐,拥抱便捷】🔍 还在为找房子跑断腿?为卖房发愁吗?今天给大家安利一个超…

【.NET全栈】ASP.NET开发Web应用——AJAX开发技术

文章目录 前言一、ASP.NET AJAX基础1、AJAX技术简介2、ASP.NET AJAX技术架构 二、ASP.NET AJAX服务器端扩展1、声明ScriptManager控件2、使用ScriptManager分发自定义脚本3、在ScriptManager中注册Web服务4、处理ScriptManager中的异常5、编程控制ScriptManager控件6、使用Upda…

GPT LangChain experimental agent - allow dangerous code

题意:GPT LangChain 实验性代理 - 允许危险代码 问题背景: Im creating a chatbot in VS Code where it will receive csv file through a prompt on Streamlit interface. However from the moment that file is loaded, it is showing a message with…

vue使用x6画流程图,简单使用

官网 https://x6.antv.antgroup.com/tutorial/getting-started 安装 npm install antv/x6 --save 使用 <template><div>3333<div id"container" style"width: 800px;height: 800px;"></div></div> </template> <…

上海昇腾AI训练营笔记

文章目录 Ascend C简介CANN架构昇腾AI加速卡AI Core内部计算架构抽象AI Core内核计算SPMD核函数编程API编程范式矩阵编程矩阵乘法数据分块 Ascend C简介 Ascend C系列AI处理器适用于计算力需求较低的场景&#xff0c;如智能监控、边缘计算等。提供多种精简模式和高性能模式&am…

推出全新的ZL3079x、ZL3069x、ZL3066x同步器,优化用于5G运输和无线基础设施设备

一、单通道、双通道和三通道IEEE1588/SyncE网络同步器 ZL3079x提供1个、2个和三个独立的组合硬件和软件平台定时通道&#xff0c;包括IEEE 1588-2008精确时间协议栈和同步算法。该设备使用miTimePLL定时技术&#xff0c;为5G传输和无线基础设施设备提供新的改进功能。该器件非…

如何轻松将Squarespace网站迁移到WordPress

Squarespace是一款非常出色的建站CMS工具&#xff0c;旨在帮助用户轻松地创建高品质的网站&#xff0c;它的特点是注重精美的视觉效果和良好的用户体验&#xff0c;在模板的精致度和易用度上都做的非常好。但是它也有一些缺点&#xff0c;Squarespace是一个封闭系统的CMS&#…

【音视频 | HTTP协议】HTTP协议详细介绍(HTTP方法、报文格式、报文头部字段、状态码)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Redis 关于内存碎片的解决方法

今天生产机报内存爆满异常被叫过去查看问题&#xff0c;通过各种排除最终定位到了Redis的内存碎片的问题&#xff0c;这篇博客将详细介绍Redis内存碎片问题并给出最佳实践解决此问题。 Redis的内存碎片原理 先引用Redis官方的原话&#xff1a; 当键被删除时&#xff0c;Redis …

C/C++ xml库

文章目录 一、介绍1.1 xml 介绍1.2 xml 标准1.3 xml 教程1.4 xml 构成 二、C/C xml 库选型2.1 选型范围2.2 RapidXML2.3 tinyxml22.4 pugixml2.5 libxml 五、性能比较5.1 C xml 相关的操作有哪些5.2 rapidxml、Pugixml、TinyXML2 文件读取性能比较 六、其他问题6.1 version和 e…

PlantUML-UML 绘图工具安装、Graphviz安装、本地使用/在线使用、语法、图示案例

文章目录 前言本地安装vscode安装插件下载安装Graphviz配置Graphviz环境变量测试 在线使用演示PlantUML语法总结活动图&#xff08;新语法&#xff09;时序图类图用例图其他图 更多相关内容可查看 前言 本篇提供两种使用方式分别为 在线使用地址1&#xff1a;https://www.pla…

React安装(学习版)

1. 安装Node.js和npm 首先&#xff0c;确保你的电脑上已经安装了Node.js和npm&#xff08;Node Package Manager&#xff09;。你可以从 Node.js官网 下载安装包并按照提示进行安装。安装完成后&#xff0c;可以在命令行终端中验证Node.js和npm是否正确安装&#xff1a; node …

逆向案例二十五——webpack所需模块函数很多,某翼云登录参数逆向。

解决步骤&#xff1a; 网址&#xff1a;aHR0cHM6Ly9tLmN0eXVuLmNuL3dhcC9tYWluL2F1dGgvbG9naW4 不说废话&#xff0c;密码有加密&#xff0c;直接搜索找到疑似加密位置打上断点。 再控制台打印&#xff0c;分析加密函数 有三个处理过程&#xff0c;b[g]得到的是用户名,b[f] 对…

【Unity学习笔记】第二十 · 物理引擎脉络梳理(数值积分、碰撞检测、约束解决)

转载请注明出处: https://blog.csdn.net/weixin_44013533/article/details/139808452 作者&#xff1a;CSDN|Ringleader| 物理引擎综述 物理引擎是利用物理规则模拟物体运动和碰撞的模块&#xff0c;以在重力、弹力、摩擦力等各种力作用下做出真实运动表现&#xff0c;并对碰…

CI/CD的node.js编译报错npm ERR! network request to https://registry.npmjs.org/

1、背景&#xff1a; 在维护paas云平台过程中&#xff0c;有研发反馈paas云平台上的CI/CD的前端流水线执行异常。 2、问题描述&#xff1a; 流水线执行的是前端编译&#xff0c;使用的是node.js环境。报错内容如下&#xff1a; 2024-07-18T01:23:04.203585287Z npm ERR! code E…

高性能分布式IO系统BL205 OPC UA耦合器

边缘计算是指在网络的边缘位置进行数据处理和分析&#xff0c;而不是将所有数据都传送到云端或中心服务器&#xff0c;这样可以减少延迟、降低带宽需求、提高响应速度并增强数据安全性。 钡铼BL205耦合器就内置边缘计算功能&#xff0c;它不依赖上位机和云平台&#xff0c;就能…