SpringCloud系列(十三)[分布式搜索引擎篇] - ElasticSearch 的概念及 Centos 7 下详细安装步骤

news2024/11/15 13:42:34

打开淘宝, 搜索 狂飙 会出现各种价格有关狂飙的书籍, 当然也有高启强同款的孙子兵法!!! 如下图所示:
在这里插入图片描述
那么面对海量的数据, 如何快速且准确的找到我们想要的内容呢? 淘宝界面已经可以按照综合排序 / 销量 / 信用 / 价格等进行筛选, 是如何做到的呢?

ElasticSearch 1

  • 1 ElasticSearch 的概念
    • 1.1 基本概念
    • 1.2 ELK 技术栈
    • 1.3 ElasticSearch 与 Lucene
    • 1.4 ElasticSearch 与 MySQL
  • 2 正向索引及倒排索引
    • 2.1 正向索引
    • 2.2 倒排索引
    • 2.3 总结
  • 3 部署 ElasticSearch
  • 4 部署 Kibana
  • 5 安装 IK 分词器

1 ElasticSearch 的概念

1.1 基本概念

  ElasticSearch 是一款非常强大的开源搜索引擎, 那么其功能也就是帮助我们在海量的数据中找到想要的数据内容, 如上面我们在淘宝界面搜索狂飙展现出的内容, 如我们敲代码遇到 BUG 复制到百度看到的内容.
  ElasticSearch 是面向文档 (Document) 存储的, 可以是数据库中的一条商品数据或者是一个订单信息, 文档数据会被序列化为 json 格式后存储在 ElasticSearch 中;
在这里插入图片描述

1.2 ELK 技术栈


  在学习分布式搜索引擎之前, 先来了解一下 ELK 技术栈的概念, Elasticsearch / Logstash( / Beats) 和 Kibana 这三个技术就是常说的 ELK 技术栈, 这三个技术的结合是大数据领域中一个很巧妙的设计, 当然这也是一种经典的 MVC 模型思想.

  • Logstash 担任控制层的角色, 负责数据的搜集及过滤;
  • Elasticsearch 担任数据持久层的角色, 负责数据的存储;
  • Kibana 则是一个开源的分析与可视化平台, 设计的初衷也是用来搭配 ElasticSearch 的使用, 可以用 Kibana 搜索和查看存放在 ElasticSearch 中的数据, Kibana 与 Elasticsearch 的交互方式是各种不同的图表 / 表格 / 地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。
    在这里插入图片描述
    通过上面的概念可知 ElasticSearch 是 ELK 技术栈的核心, 毕竟其主要工作便是 存储 / 搜索 / 分析数据.

1.3 ElasticSearch 与 Lucene


  Lucene 是 Java 语言的搜索引擎类库, 为 Apache 公司的项目, 而 ElasticSearch 的底层就是基于 Lucene 来实现的, 两者的优缺点如下: Lucene: * 易扩展 / 高性能; * 只限于 Java 语言开发 / 不支持水平扩展;

ElasticSearch:

  • 支持分布式, 可水平扩展;
  • 提供了 Restful 接口, 可被任何语言调用.

1.4 ElasticSearch 与 MySQL

MySQL 更擅长事务类型的操作, 可以确保数据的安全性和一致性;
ElasticSearch 更擅长海量数据的搜索 / 分析 / 计算.
因此, 在企业中往往两种结合在一起使用, 场景如下:

  • 对查询性能要求较高的搜索需求使用 ElasticSearch 实现;
  • 对安全性要求较高的写操作往往使用 MySQL 实现.

在这里插入图片描述

2 正向索引及倒排索引

关于索引和映射之间的区别:

  • 索引就是相同类型的文档的集合, 如所有商品的文档可以放在一块进行组织, 成为商品的索引; 如所有的用户都放在一起进行组织就称之为用户的索引;
  • 因为数据库中各个表中的数据基本都是相同类型, 因此数据库中的表可以称之为是索引;
  • 因为数据库中的表会有约束信息, 用来定义表的结构 / 字段的名称或者类型等信息, 因此索引库中就有映射 (mapping), 关于映射的概念可以理解为索引中文档的字段约束信息, 类似于表结构的约束.

2.1 正向索引


  在学习倒排索引之前, 先了解正向索引的概念, 如下图 MySQL 表;
在这里插入图片描述
 如果是根据 id 进行查询可以直接 select * from gen_table where table_id=93, 但是如果在此表中进行模糊搜索 “信息” 这两个字眼, 只能逐行进行搜索, select * from gen_table where table_comment like '%信息%', 步骤如下:
 1 用户根据 table_comment 这个条件进行搜索数据;
 2 逐行获取数据, 从 id 为 93 这一行开始;
 3 判断数据中的 table_comment 是否符合用户的搜索条件;
 4 如果符合, 则放入结果集, 否则就丢弃, 回到步骤 1 进行重复.
如果表中的数据比较少, 还可以这样进行查询, 但是如果数据量巨大, 全表搜索查询效率将会非常低, 你能忍受搜索数据等待个小时为单位的时间么?

2.2 倒排索引

  倒排索引的两个比较重要的概念:

  • 文档(Document): 用来搜索的数据, 其中的每一条数据就是一个文档, 如一个网页或者是一件商品信息;
  • 词条(Term): 对文档数据或用户搜索数据, 利用某种算法分词, 得到的具备含义的词语就是词条, 如 “狂飙这部剧真好看” 就可以分为: "狂, 狂飙, 这, 部, 剧, 真, 好看"这样的词条.

主要流程:


创建倒排索引是对正向索引的一种特殊处理, 如下:

  1. 将每一个文档的数据利用算法进行分词, 得到多个词条;
  2. 创建表, 每行数据包含词条 / 词条所在文档的 id 及位置等信息;
  3. 因为词条的唯一性, 因此可以给词条创建索引, 如 hash 表结构索引.

在这里插入图片描述
例如: 使用倒排索引搜索 “阿迪篮球鞋” 流程如下:

  • 我们输入 “阿迪篮球鞋” 进行搜索;
  • 对输入的内容进行分词, 得到两个词条: 阿迪, 篮球鞋;
  • 根据这两个词条在倒排索引中进行查找, 可以得到包含词条的文档 id 为: 1, 2;
  • 拿着文档 id 在正向索引中查找到具体的文档.


    在这里插入图片描述

2.3 总结

  • 正向索引
    • 优点:
      • 可以为多个字段创建索引;
      • 根据索引字段进行搜索, 速度比较快;
    • 缺点:
      • 根据非索引字段或者索引字段中的部分词条查找时, 只能全表扫描;
  • 倒排索引
    • 优点:
      • 根据词条搜索或者模糊搜索时, 速度非常快;
    • 缺点:
      • 只能给词条创建索引, 而不是字段;
      • 无法根据字段进行排序.

3 部署 ElasticSearch


在安装 ElasticSearch 时遇到了很多 “坑”, 如果有在安装的过程中报错, 请点击此链接来查看解决办法: 【Debug】Centos 7 下部署 ElasticSearch 及 Kibana 时踩过的坑;
声明此安装是在 Centos 7 环境下的安装.

步骤一: 创建网络;
  因为我们需要部署 Kibana 容器, 因此需要让 ElasticSearch 和 Kibana 容器进行关联, 因此需要创建一个网络: docker network create es-net;


步骤二: 加载镜像;
  这里需要注意 ElasticSearch 的版本和 Kibana 的版本一致, 主要方式有两种, 如下:

  • 自己在官网下载包, 官网下载点击此处, 然后上传到虚拟机中, 运行 docker load -i elasticsearch.tar 执行加载即可; 大部分的电脑这种操作还是没问题的, 但是我的电脑这种方式不妥, 其实最保险的方式还是下面这种方式;
  • 在 docker 镜像仓库查找指令, 网站为: Docker 镜像仓库, 这里我选的是 7.17.7 版本, docker pull elasticsearch:7.17.7, 如下图所示:
    在这里插入图片描述
    在这里插入图片描述

步骤三: 运行并部署 ElasticSearch, 指令如下:

docker run -d \
	--name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.17.7

指令解析:
在这里插入图片描述

4 部署 Kibana

步骤一: 建议直接拉去, 指令: docker pull kibana:7.17.7;
在这里插入图片描述


步骤二: 运行并部署;

docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601  \
kibana:7.17.7

指令解析:
在这里插入图片描述


步骤三: 浏览器输入 http://172.16.00.99:5601 (去看自己虚拟机的 ip) 查看是否出现界面;
在这里插入图片描述

5 安装 IK 分词器

步骤一: 进入容器内部, 执行指令: docker exec -it es /bin/bash, es 为我的容器名称, 这里写自己命名的 ElasticSearch 容器的名称;
在这里插入图片描述
将指令 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.17.7/elasticsearch-analysis-ik-7.17.7.zip 复制进去回车;因为我的电脑已经安装过, 所以报错已存在;
在这里插入图片描述


步骤二: 执行 exit 指令并重启 ElasticSearch 容器: docker restart es;


步骤三: 测试;
在这里插入图片描述
在这里插入图片描述


总结:
1 分词器的作用:

  • 创建倒排索引时对文档分词;
  • 用户搜索时对输入的内容进行分词.

2 IK 分词器的两种模式:

  • ik_smart: 智能切分, 粗粒度;
  • ik_max_word: 最细切分, 细粒度.

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

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

相关文章

实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

上一节课,我们做了一些理论知识的铺垫性讲解,讲到了两种开发模式,基于贫血模型的传统开发模式,以及基于充血模型的DDD开发模式。今天,我们正式进入实战环节,看如何分别用这两种开发模式,设计实现一个钱包系统。话不多说,让我们正式…

python自制PDF转换.PNG格式图片(按每页生成图片完整源码)小工具!

使用PyQt5应用程序制作PDF转换成图片的小工具,可以导入PDF文档后一键生成对应的PNG图片。 PDF图片转换小工具使用的中间件: python版本:3.6.8 UI应用版本:PyQt5 PDF文件操作非标准库:PyPDF2 PNG图片生成库&#xff1…

VINS-Mono/Fusion与OpenCV去畸变对比

VINS中没有直接使用opencv的去畸变函数,而是自己编写了迭代函数完成去畸变操作,主要是为了加快去畸变计算速度 本文对二者的结果精度和耗时进行了对比 VINS-Mono/Fusion与OpenCV去畸变对比1 去畸变原理2 代码实现2.1 OpenCV去畸变2.2 VINS去畸变3 二者对…

压缩20M文件从30秒到1秒的优化过程

压缩20M文件从30秒到1秒的优化过程 有一个需求需要将前端传过来的10张照片,然后后端进行处理以后压缩成一个压缩包通过网络流传输出去。之前没有接触过用Java压缩文件的,所以就直接上网找了一个例子改了一下用了,改完以后也能使用&#xff0…

(考研湖科大教书匠计算机网络)第四章网络层-第九节:虚拟专用网与网络地址转换

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:虚拟专用网(1)虚拟专用网是什么(2)虚拟专用网如何分配IP地址(3)例子&#x…

【JAVA八股文】框架相关

框架相关1. Spring refresh 流程2. Spring bean 生命周期3. Spring bean 循环依赖解决 set 循环依赖的原理4. Spring 事务失效5. Spring MVC 执行流程6. Spring 注解7. SpringBoot 自动配置原理8. Spring 中的设计模式1. Spring refresh 流程 Spring refresh 概述 refresh 是…

深度学习(1)神经网络基础

要学习深度学习,那么首先要熟悉神经网络(Neural Networks,简称NN)的一些基本概念。当然,这里所说的神经网络不是生物学的神经网络,我们将其称之为人工神经网络(Artificial Neural Networks&…

海豚调度2.0.5 星环驱动包踩坑(二)worker服务正常、zk注册正常,心跳时间不更新,也不执行任务,任务一直处于执行中状态

目录背景问题记录20230206 发现服务启动失败20230215 有一台worker不执行作业,其它均正常问题解决问题思考背景 之前分享过海豚调度2.0.5连接星环库使用记录,后来说存储过程又出现了超时的情况,原因是因为调度星环驱动包和生产星环库驱动包不…

ES 异常写入解决流程

问题说明 一天下午,在北京客户现场的同学反馈我们elasticsearch出现的大量的异常,他反馈说他使用多线程写入大量数据到elasticsearch集群时,隔一段时间之后就会出现CircuitBreakingException,多尝试几次后,他就把问题反…

基于微信小程序的微信社团小程序

文末联系获取源码 开发语言:Java 框架:ssm JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器…

JavaEE|网络原理·上

文章目录一、网络发展史1.独立模式2.网络互联3.局域网(LAN)4.广域网(WAN)局域网组网的方式①基于网线直连②基于集线器(hub)组建③基于交换机(switch)组建④基于交换机和路由器组建二、网络通信基础1.ip地址…

Winform控件开发(14)——NotifyIcon(史上最全)

前言: 先看个气泡提示框的效果: 代码如下: 在一个button中注册click事件,当我们点击button1时,就能显示气泡 private void button1_Click(object sender, EventArgs e){notifyIcon1.Visible = true;notifyIcon1

【论文速递】ICLR2018 - 用于小样本语义分割的条件网络

【论文速递】ICLR2018 - 用于小样本语义分割的条件网络 【论文原文】:CONDITIONAL NETWORKS FOR FEW-SHOT SEMANTIC SEGMENTATION(Workshop track - ICLR 2018) 【作者信息】:Kate Rakelly Evan Shelhamer Trevor Darrell Alexe…

PyTorch - Conv2d 和 MaxPool2d

文章目录Conv2d计算Conv2d 函数解析代码示例MaxPool2d计算函数说明卷积过程动画Transposed convolution animationsTransposed convolution animations参考视频:土堆说 卷积计算 https://www.bilibili.com/video/BV1hE411t7RN 关于 torch.nn 和 torch.nn.function t…

Reverse入门[不断记录]

文章目录前言一、[SWPUCTF 2021 新生赛]re1二、[SWPUCTF 2021 新生赛]re2三、[GFCTF 2021]wordy[花指令]四、[NSSRound#3 Team]jump_by_jump[花指令]五、[NSSRound#3 Team]jump_by_jump_revenge[花指令]前言 心血来潮,想接触点Reverse,感受下Reverse&am…

网络编程(一)

网络编程 文章目录网络编程前置概念1- 字节序高低地址与高低字节高低地址:高低字节字节序大端小端例子代码判断当前机器是大端还是小端为何要有字节序字节序转换函数需要字节序转换的时机例子一例子二2- IP地址转换函数早期(不用管)举例现在与字节序转换函数相比:**…

模块化热更思路

title: 模块化热更思路 categories: Others tags: [热更, 模块化, 分包] date: 2023-02-18 01:04:57 comments: false mathjax: true toc: true 模块化热更 浅浅的记录一下访问破 200w (But, I don’t care about this.) 前篇 只谈思路, 不贴实现代码. 需求 游戏类型属于合集…

Linux(十三)设计模式——单例模式

设计模式——针对典型场景所设计出来的特别的处理方案 单例模式:一个类只能实例化一个对象(所以叫单例) 场景: 1、资源角度:资源在内存中只占有一份 2、数据角度:如果只有一个对象,那么该对象在…

2019蓝桥杯真题质数(填空题) C语言/C++

题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5…… 请你计算第 2019 个质数是多少? 运行限制 最大运行时间:1s 最大运行内存: 128M…

Mac下安装Tomcat以及IDEA中的配置

安装brew 打开终端输入以下命令: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 搜索tomcat版本,输入以下命令: brew search tomcat 安装自己想要的版本,例…