谷粒商城-全文检索-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.rhkb.cn/news/379400.html

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

相关文章

均值滤波算法及实现

均值滤波器的使用场景: 均值滤波器使用于处理一些如上述蓝色线的高斯噪声场景 红色曲线是经过均值滤波处理后的数据。主要因为均值滤波设置数据缓冲区(也即延时周期),使得测量值经过缓冲不会出现特别大的变化。 黄色曲线为高斯噪声…

【Node.js】初识 Node.js

Node.js 概念 Node.js 是一个开源与跨平台的 JavaScript运行时环境 ,在浏览器外运行 V8 JavaScript 引擎(Google Chrome的内核),利用事件驱动、非阻塞和异步输入输出 等技术提高性能。 可以理解为 Node.js就是一个服务器端的、非阻塞式 l/O 的、事件驱…

香橙派AIpro-携手华为-为AI赋能

文章目录 香橙派AIpro-携手华为-为AI赋能开箱和功能介绍开箱功能介绍 环境搭建镜像烧录进入系统 测试项目YOLOv5部署YOLOv5识别单张图片实时识别视频使用Ascend测试yolov5 产品评价 香橙派AIpro-携手华为-为AI赋能 今天新入手了一款香橙派AIPro,让我们一起跟着文章…

【iOS】—— 消息传递和消息转发

【iOS】—— 消息传递和消息转发 1. 消息传递SEL选择子IMP快速查找汇编代码查找过程总结消息转送快速查找IMP 慢速查找总结消息传递慢速查找IMP 2. 消息转发动态决议动态解析添加方法 快速转发慢速转发 总结动态决议消息转发消息的三次拯救 1. 消息传递 在iOS中,消…

python 获取Shopee虾皮商家店铺商品列表 虾皮api数据采集

此api接口可用于获取虾皮平台商家店铺的商品列表,目前land参数支持id、vn、my、th、sg、ph、tw(印尼、越南、马来、泰国、新加坡、菲律宾、台湾)。 若有需要,请点击文末链接联系我们。 详细采集页面如下https://shopee.tw/yuesh…

【Python】数据处理(mongodb、布隆过滤器、索引)

数据 数据预处理 df pd.read_csv(file_path, encodingANSI) csv的编码方式一定要用 ANSI。要不然会出现各种报错 import pandas as pd from datetime import datetime# 读取CSV文件 file_path book_douban.csv df pd.read_csv(file_path, encodingANSI)# 定义一个函数来…

【信号频率估计】MVDR算法及MATLAB仿真

目录 一、MVDR算法1.1 简介1.2 原理1.3 特点1.3.1 优点1.3.2 缺点 二、算法应用实例2.1 信号的频率估计2.2 MATLAB仿真代码 三、参考文献 一、MVDR算法 1.1 简介 最小方差无失真响应(Mininum Variance Distortionless Response,MVDR)算法最…

最新开源的解析效果非常好的PDF解析工具MinerU (pdf2md pdf2json)

毫不夸张的说 PDF解析工具MinerU是照进RAG黑暗中的一道光——这是我对它的评价。我测过太多了文档解析工具! 最近在做文档解析的工作。看了很多的开源的文档解析的工具,版面分析的工具,其中包括paddelpaddel这样30kstar的明星工具。但是效果都…

electron项目中实现视频下载保存到本地

第一种方式:用户自定义选择下载地址位置 渲染进程 // 渲染进程// 引入 import { ipcRenderer } from "electron";// 列表行数据下载视频操作,diffVideoUrl 是视频请求地址 handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message…

【数据结构】二叉树———Lesson2

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

网安小贴士(17)认证技术原理应用

前言 认证技术原理及其应用是信息安全领域的重要组成部分,涉及多个方面,包括认证概念、认证依据、认证机制、认证类型以及具体的认证技术方法等。以下是对认证技术原理及应用的详细阐述: 一、认证概述 1. 认证概念 认证是一个实体向另一个实…

【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

Chromium CI/CD 之Jenkins实用指南2024 - 常见的构建错误(六)

1. 引言 在前一篇《Chromium CI/CD 之 Jenkins - 发送任务到Ubuntu(五)》中,我们详细讲解了如何将Jenkins任务发送到Ubuntu节点执行,并成功验证了文件的传输和回传。这些操作帮助您充分利用远程节点资源,提升了构建和…

CrossKD: Cross-Head Knowledge Distillation for Dense Object Detection

CrossKD:用于密集目标检测的交叉头知识蒸馏 论文链接:https://arxiv.org/abs/2306.11369v2 项目链接:https://github.com/jbwang1997/CrossKD Abstract 知识蒸馏(Knowledge Distillation, KD)是一种有效的学习紧凑目标检测器的模型压缩技术…

Uniapp 组件 props 属性为 undefined

问题 props 里的属性值都是 undefined 代码 可能的原因 组件的名字要这样写,这个官方文档有说明

【转盘案例-弹框-修改Bug-完成 Objective-C语言】

一、我们来看示例程序啊 1.旋转完了以后,它会弹一个框,这个框,是啥, Alert 啊,AlertView 也行, AlertView,跟大家说过,是吧,演示过的啊,然后,我们就用iOS9来做了啊,完成了以后,我们要去弹一个框, // 弹框 UIAlertController *alertController = [UIAlertContr…

爬虫案例(读书网)(下)

上篇链接: CSDN-读书网https://mp.csdn.net/mp_blog/creation/editor/139306808 可以看见基本的全部信息:如(author、bookname、link.....) 写下代码如下: import requests from bs4 import BeautifulSoup from lxml import etreeheaders{…

【中项】系统集成项目管理工程师-第2章 信息技术发展-2.1信息技术及其发展-2.1.1计算机软硬件与2.1.2计算机网络

前言:系统集成项目管理工程师专业,现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试,全称为“全国计算机与软件专业技术资格(水平)考试”&…

内部类+图书管理系统

内部类图书管理系统 1. 实例内部类1.1 实例内部类的结构1.2 实例内部类的一些问题1.2.1 如何在main中创建实例内部类对象?1.2.2 内部类成员变量被static修饰问题?1.2.3 内部类和外部类变量重名的调用问题?1.2.4 外部类访问内部类变量的问题 2…

HiFi-GAN——基于 GAN 的声码器,能在单 GPU 上生成 22 KHz 音频

拟议的 HiFiGAN 可从中间表征生成原始波形 源码地址:https://github.com/NVIDIA/DeepLearningExamples 论文地址:https://arxiv.org/pdf/2010.05646.pdf 研究要点包括 **挑战:**基于 GAN 的语音波形生成方法在质量上不及自回归模型和基于流…