谷粒商城-全文检索-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://www.mzph.cn/web/46450.shtml

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

相关文章

基于X86+FPGA+AI数字化医疗设备:全自动尿沉渣检测仪

助力数字医疗发展,信迈可提供全自动尿沉渣检测仪专用计算机 随着信息技术的不断进步,医疗也进入了一个全新的数字化时代。首先是医疗设备的数字化,大大丰富了医疗信息的内涵和容量,具有广阔的市场发展前景。 数字化医疗设备&…

使用Redis的SETNX命令实现分布式锁

什么是分布式锁 分布式锁是一种用于在分布式系统中控制多个节点对共享资源进行访问的机制。在分布式系统中,由于多个节点可能同时访问和修改同一个资源,因此需要一种方法来确保在任意时刻只有一个节点能够对资源进行操作,以避免数据不一致或…

嵌入式香橙派人工智能AI开发板详细操作与远程聊天实现

大家好,今天给大分享一个OrangePi AIpro(20T)采用昇腾作为主控芯片的开发板,开箱以及对应功能的详细实现。 第一:板子基本介绍 接通电源给对应的开发板上电,观察其中的现象,如下: 注…

基于HAL库的stm32的OLED显示屏显示(IIC)

OLED OLED,即有机发光二极管( Organic Light Emitting Diode )。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器…

龙国专利局瑞数6

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi a…

配置和保护SSH

使用SSH访问远程命令行 描述Secure Shell SSH(Secure Shell) 是一种网络协议,用于在不安全的网络上安全地进行系统管理和数据传输。它最初由 Tatu Ylnen 于1995年设计,并成为保护网络服务免受攻击的标准。SSH提供了多种功能&…

基于SpringBoot+Vue的广场舞团系统(带1w+文档)

基于SpringBootVue的广场舞团系统(带1w文档) 基于SpringBootVue的广场舞团系统(带1w文档) 广场舞团,为用户随时随地查看广场舞团信息提供了便捷的方法,更重要的是大大的简化了管理员管理广场舞团信息的方式方法,更提供了其他想要了解广场舞团…

基于Trace的类型特化动态语言JIT编译

文章目录 Explain一、简介二、一个跟踪运行的示例三、跟踪树3.1 Traces类型特化(Type specialization) 3.2 Trace Trees3.3 黑名单(Blacklisting) 四、嵌套跟踪树4.1 Nesting Algorithm4.2 Blacklisting with Nesting 五、跟踪树优…

【Pytorch】一文向您详细介绍 torch.randn_like()

🎉🔥【Pytorch】一文向您详细介绍 torch.randn_like() 🔥🎉 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 …

滑动窗口题目

题目描述&#xff1a; 计算两个字符串str1和str2在给定的含有n个元素的字符串数组strs中出现的最短距离。 详细解释&#xff1a; 定义整数变量n&#xff0c;用于存储字符串数组strs的长度。定义一个vector<string>类型的变量strs&#xff0c;用于存储输入的字符串。定义…

破解反爬虫策略 /_guard/auto.js(一) 原理

背景 当用代码或者postman访问一个网站的时候&#xff0c;访问他的任何地址都会返回<script src"/_guard/auto.js"></script>&#xff0c;但是从浏览器中访问显示的页面是正常的&#xff0c;这种就是网站做了反爬虫策略。本文就是带大家来破解这种策略&…

4.3 最小二乘近似

一、最小二乘解 A x b A\boldsymbol x\boldsymbol b Axb 经常无解&#xff0c;一般是因为方程太多了。矩阵 A A A 的行比列要多&#xff0c;即方程要多余未知数&#xff08; m > n m>n m>n&#xff09;。 n n n 个列只能张成 m m m 空间的一小部分&#xff0c;除非…

面向铁路、地铁旅客信息系统(PIS)的上架型整机,铁路专用M12网络接口,满足欧洲铁路应用标准

上架型整机 2U 19寸上架型整机&#xff0c;采用高性能低功耗处理器&#xff0c;能应用在宽温环境下&#xff0c;并满足欧洲铁路应用标准EN50155关于电磁兼容性&#xff0c;冲击和振动测试试验的要求&#xff0c;是一款面向铁路、地铁旅客信息系统&#xff08;PIS&#xff09;的…

C# 关于 PaddleOCRSharp OCR识别的疲劳测试

目录 关于 PaddleOCRSharp 应用范例演示 ​范例运行环境 疲劳测试 添加组件库 方法设计 调用示例 小结 关于 PaddleOCRSharp PaddleOCRSharp 是百度飞桨封装的.NET版本 OCR dll 类库&#xff0c;OCR&#xff08;Optical Character Recognition&#xff09;工具可以将…

【Java面向对象】抽象类和接口

文章目录 1.抽象类2.常见的抽象类2.1 Number类2.2 Calendar 和GregorianCalendar 3.接口4.常见接口4.1 Comparable 接口4.2 Cloneable 接口4.3 深浅拷贝 5.类的设计原则 1.抽象类 在继承的层次结构中&#xff0c;每个新的子类都使类变得更加明确和具体。如果从一个子类向父类追…

Unty 崩溃问题(Burst 1.8.2)

错误代码&#xff1a; Assertion failed on expression: exception SCRIPTING_NULL UnityEngine.StackTraceUtility:ExtractStackTrace () Unity.Burst.BurstCompiler:SendRawCommandToCompiler (string Unity版本&#xff1a;2021.3.17F1&#xff0c;Burst 1.8.2 表现&…

python安装talib库教程

【talib介绍】 Talib介绍 Talib&#xff0c;全称“Technical Analysis Library”&#xff0c;即技术分析库&#xff0c;是一个广泛应用于金融量化领域的Python库。该库由C语言编写&#xff0c;支持Python调用&#xff0c;为投资者、交易员和数据分析师提供了强大的技术分析工…

酷炫末世意境背景404单页HTML源码

源码介绍 酷炫末世意境背景404单页HTML源码&#xff0c;背景充满着破坏一切的意境&#xff0c;彷佛末世的到来&#xff0c;可以做网站错误页或者丢失页面&#xff0c;将下面的代码放到空白的HTML里面&#xff0c;然后上传到服务器里面&#xff0c;设置好重定向即可 效果预览 …

论文学习——基于自适应选择的动态多目标进化优化有效响应策略

论文题目&#xff1a;Effective response strategies based on adaptive selection for dynamic multi-objective evolutionary optimization 基于自适应选择的动态多目标进化优化有效响应策略&#xff08;Xiaoli Li a,b,c, Anran Cao a,∗, Kang Wang a&#xff09;Applied S…

零基础STM32单片机编程入门(十五) DHT11温湿度传感器模块实战含源码

文章目录 一.概要二.DHT11主要性能参数三.DHT11温度传感器内部框图四.DTH11模块原理图五.DHT11模块跟单片机板子接线和通讯时序1.单片机跟DHT11模块连接示意图2.单片机跟DHT11模块通讯流程与时序 六.STM32单片机DHT11温度传感器实验七.CubeMX工程源代码下载八.小结 一.概要 DH…