实用篇-ES环境搭建

news2024/11/26 1:30:31

ES(elasticsearch) 是一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能

elastic stack 是elasticsearch为核心的技术栈,包括beats、logstash(用作数据收集)、kibana(负责图形展示)、elasticsearch(负责数据搜索,存储等核心功能)

Lucene 是Apache的开源搜索引擎类库,也就是一个jar包,提供了搜索引擎的核心API,elasticsearch就是基于它来做的二次开发

常见的分布式搜索的技术,如下
1、Elasticsearch: 开源的分布式搜索引擎
2、Splunk: 商业项目,收费
3、Solr: Apache的开源搜索引擎

一、倒排索引

传统数据库(例如MySQL)采用正向索引,例如给下表(tb_goods)中的id创建索引
image.png

elasticsearch采用倒排索引,例如给下表(tb_goods)中的id创建索引
image.png

以下是倒排索引的搜索过程
image.png

总结
1、正向索引: 基于文档id来创建索引。查询词条时必须先找到文档,而后判断是否包含词条
2、倒排索引: 对文档内容进行分词,对词条创建索引,并记录词条所在文档的信息。查询时先根据词条
去查询文档id,然后获取到文档
3. 正向索引是逐个遍历的方式去查询,效率低

二、elasticsearch对比mysql

elasticsearch
elasticsearch是面向文档存储的,可以是数据库中的一条商品数据,一个订单信息。注意elasticsearch的文档是以json形式存储的,也就是说,我们把数据(也叫文档)存储进elasticsearch时,这些文档数据就会自动被序列化为json格式,然后才存储进elasticsearch
elasticsearch的索引: 相同类型的文档的集合。索引和映射的概念,如下图

image.png

下面的表格是介绍elasticsearch中的各个概念以及含义,看的时候重点看第二、三列,第一列是为了让你更理解第二列的意思,所以在第一列拿MySQL的概念来做匹配。例如elasticsearch的Index表示索引也就是文档的集合,就相当于MySQL的Table(也就是表)

image.png

架构
MySQL:擅长事务擅长事务类型的操作,可以确保数据的安全和一致性。一般用于增删改
Elasticsearch: 擅长海量数据的搜索、分析、计算。一般用于查询
两者是互补的关系
image.png

总结
文档:一条数据就是一个文档,es中是json格式
字段:Json文档中的字段
索引:同类型文档的集合
映射:索引中文档的约束,比如字段名称、类型
elasticsearch与数据库的关系:

  • 数据库负责事务类型操作
  • elasticsearch负责海量数据的搜索、分析和计算

三、elasticsearch安装

elasticsearch、kibana、IK分词器,这三者通常是一起使用的
注意: 我们学习elasticsearch是基于docker容器来使用,需要你们提前准备好自己的docker容器以及掌握docker操作。elasticsearch一般都是搭配kibana(下节会学如何安装)来使用,kibana的作用是让我们非常方便的去编写elasticsearch中的DSL语句,从而去操作elasticsearch
首先安装es
第一步: 创建网络。因为我们还需要部署kibana容器,因此需要让es和kibana容器互联

systemctl start docker    # 启动docker服务
docker network create es-net #创建一个网络,名字是es-net

第二步: 加载es镜像。采用elasticsearch的7.12.1版本的镜像,这个镜像体积有800多MB,所以需要在Windows上下载链接安装包,下载下来是一个es的镜像tar包,然后传到CentOS7的/root目录

es.tar下载: https://cowtransfer.com/s/c84ac851b9ba44
kibana.tar下载: https://cowtransfer.com/s/a76d8339d7ba4d

第三步: 把在CentOS7的/root目录的es镜像,导入到docker

docker load -i es.tar
docker load -i kibana.tar

在这里插入图片描述
第四步: 创建并运行es容器,容器名称就叫es。在docker(也叫Docker大容器、Docker主机、宿主机),根据es镜像来创建es容器

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.12.1

命令解释:
● -e “cluster.name=es-docker-cluster”:设置集群名称
● -e “http.host=0.0.0.0”:监听的地址,可以外网访问
● -e “ES_JAVA_OPTS=-Xms512m -Xmx512m”:内存大小,不能低于512
● -e “discovery.type=single-node”:运行模式,例如非集群模式
● -v es-data:/usr/share/elasticsearch/data:挂载数据卷,绑定es的数据目录
● -v es-logs:/usr/share/elasticsearch/logs:挂载数据卷,绑定es的日志目录
● -v es-plugins:/usr/share/elasticsearch/plugins:挂载数据卷,绑定es的插件目录
● --privileged:授予数据卷访问权
● --network es-net :加入一个名为es-net的网络中
● -p 9200:9200:端口映射配置,向外暴露的http请求端口,用于用户访问
● -p 9300:9300:端口映射配置,是es容器各个节点之间互相访问的端口,由于我们是单节点部署,所以用不到
● elasticsearch:7.12.1: 镜像名称,要把哪个镜像创建为容器,注意带版本号

浏览器访问http://192.168.229.129:9200
在这里插入图片描述

四、安装Kibana

第一步: 确保docker是启动的

systemctl start docker    # 启动docker服务

第二步: 加载kibana镜像。这个镜像体积有1.04G,所以需要在Windows上下载链接安装包,下载下来是一个es的镜像tar包,然后传到CentOS7的/root目录(已下载)
第三步: 把在CentOS7的/root目录的kibana镜像,导入到docker

docker load -i kibana.tar

第四步: 创建并运行kibana容器,容器名称就叫kibana。在docker(也叫Docker大容器、Docker主机、宿主机),根据kibana镜像来创建kibana容器

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

# --name: 指定容器的名字,例如kibana
# --network es-net: 加入一个名为es-net的网络中,与elasticsearch在同一个网络中
# -e ELASTICSEARCH_HOSTS: 由于kibana和es会被我们设置在同一个网络,所以这里的kibana可以通过容器名直接访问es,es的容器名我们在上一节设置的是es
# -e ELASTICSEARCH_HOSTS: 设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
# -p 5601:5601: 端口映射配置,向外暴露的http请求端口,用于用户访问

浏览器输入http://192.168.229.129:5601
在这里插入图片描述

五、安装IK分词器

IK分词器官网: https://github.com/medcl/elasticsearch-analysis-ik。注意elasticsearch、kibana、IK分词器,这三者通常是一起使用的
es在创建倒排索引时,需要对文档进行分词。在搜索时,需要对用户输入的内容进行分词。但默认的分词规则不支持中文处理,默认是只支持对英文进行分词,但是在正常业务中,我们需要处理的文档大多是中文,所以我们需要对中文进行分词,所以就需要安装IK分词器

第一步: 我们在 ‘4. 安装elasticsearch’ 创建elasticsearch容器时,指定了数据卷目录,其中有个数据卷指定了自定义名称为es-plugins,表示存放插件的数据卷
我们使用inspect命令把es-plugins数据卷的路径信息查询出来

docker volume inspect es-plugins

在这里插入图片描述
第二步: 下载ik.zip压缩包到Windows,下载后解压出来是ik文件夹
根据上面查询出来的es-plugins数据卷的路径,把ik文件夹上传到CentOS7的 /var/lib/docker/volumes/es-plugins/_data 目录

https://cowtransfer.com/s/54a5fa3838d746

在这里插入图片描述
第三步: 重启elasticsearch容器,我们在 ‘. 安装elasticsearch’ 创建elasticsearch容器时,指定了自定义容器名称为es

# 重启elasticsearch容器
docker restart es

第四步: 查看elasticsearch容器的启动日志

docker logs -f es

第五步: 确保elasticsearch、kibana已正常运行

docker restart es #启动elasticsearch容器
docker restart kibana #启动kibana容器

第五步: 测试。在浏览器中输入:http://192.168.229.129:5601 即可看到elasticsearch的响应结果

IK分词器包含两种模式:
● ik_smart:最少切分,根据语义分词,正常分词
● ik_max_word:最细切分,也是根据语义分词,分的词语更多,更细
在这里插入图片描述

六、词典扩展和应用

Ik分词器的分词,底层是一个字典,在字典里面会有各种各样的词语,当ik分词器需要对分词文本进行分词时,ik分词器就会拿着这个文本(乱拆成多个词或词语),一个个去字典里面匹配,如果能匹配到,证明某个词(乱拆成多个词或词语)是词,就把这个证明后的词分出来,作为一个词
第一个问题: 字典的分词效果是有限的,只能对日常生活中常见的语义相关的词,进行分词,由于字典的词汇量少,所以我们需要对字典进行扩展。
第二个问题: 字典的分词效果往往存在违禁词,我们不希望IK分词器能匹配并成功把词典里的违禁词作为分词,解决: 禁用某些敏感词条

1、要拓展或禁用ik分词器的词库,只需要修改一个分词器目录中的config目录中的IKAnalyzer.cfg.xml文件,如下

cd /var/lib/docker/volumes/es-plugins/_data/ik/config
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典-->
        <entry key="ext_dict">ext.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典  *** 添加停用词词典-->
        <entry key="ext_stopwords">stopword.dic</entry>
</properties>

2、在config目录新建myext.dic文件,写入自己想要的特定词,也就是扩展词。新建mystopword.dic文件,写入自己想要禁用的特定词,也就是不参与分词的词
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、重新启动elasticsearch、kibana

docker restart es #启动elasticsearch容器
docker restart kibana #启动kibana容器

4、测试。在浏览器中
在这里插入图片描述

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

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

相关文章

mysq,数据库的综合查询

记录一下数据库综合查询&#xff0c;复习加深印象 创建教学数据库中包含四个基本表&#xff1a; 教师情况表Teacher&#xff08;Tno 教师号&#xff0c;TName 教师名&#xff0c;TDept 教师所在的院系&#xff09;&#xff1b;课程基本表Course&#xff08;Cno 课号&#xff…

Network(一)计算机网络介绍

一 计算机网络 1 概述 什么是计算机网络&#xff1f; 硬件方面:通过线缆将网络设备和计算机连接起来 软件方面:操作系统&#xff0c;应用软件&#xff0c;应用程序通过通信线路互连 实现资源共享、信息传递、增加可靠性、提高系统处理能力 2 网络与云计算 3 计算机网…

AI创作系统ChatGPT源码+AI绘画系统+支持OpenAI DALL-E3文生图,可直接对话文生图

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。新增支…

UWB应用于金属工具管理

超宽带&#xff08;Ultra-Wideband&#xff0c;UWB&#xff09;技术在金属工具管理方面有许多应用案例&#xff0c;它可以帮助提高工具管理的效率、安全性和精确度。以下是一些UWB在金属工具管理中的应用案例&#xff1a; 工具定位和跟踪&#xff1a;UWB技术可以用于实时定位和…

网络运维Day15

文章目录 Prometheus简介环境准备配置模板机环境部署阿里镜像源实验环境准备 部署prometheus服务查看及测试 Promethues 被监控端Grafana简介部署 Grafana 服务器修改数据源 监控数据库安装部署Mariadb安装导出器修改 Prometheus服务端配置Grafana配置 总结 Prometheus简介 Pr…

MobileSAM论文笔记

摘要 自Meta研究团队发布SAM&#xff08;Segment Anything Model&#xff09;项目依赖&#xff0c;因其令人惊艳的零样本迁移特性和与其他视觉应用兼容的高通用性&#xff0c;引起了极大的关注。由于大多数类似的应用都需要运行在资源限制的边缘设备&#xff0c;如手机&#x…

苹果独占鳌头,国产手机围攻,双十一“照妖镜”显露谁有真实力

随着双十一购物节的结束&#xff0c;电商平台也给出了各手机品牌的销量数据&#xff0c;苹果毫无疑问成为双十一的赢家&#xff0c;不过两家国产手机品牌也显露了他们的实力&#xff0c;已具有与苹果一战之力。 与去年双十一和今年618类似&#xff0c;苹果仍然占据热销榜前列&a…

YOLOv8-Seg改进:SPPF系列改进篇 | 大核分离卷积注意力模块( Large Separable Kernel Attention)

🚀🚀🚀本文改进:大核分离卷积注意力模块( Large Separable Kernel Attention),实现涨点的目标并且降低计算复杂度和显存,引入到YOLOv8,与SPPF结合实现二次创新; 🚀🚀🚀Large Separable Kernel Attention 亲测在多个数据集能够实现涨点,同样适用于小目标分…

自己动手重装电脑Win10系统方法教程

如果我们自己电脑系统出现问题了&#xff0c;无法通过简单的操作解决&#xff0c;这时候最佳的解决方法&#xff0c;就是给电脑重装安装操作系统。有用户想给电脑重装Win10系统&#xff0c;但不清楚具体的重装步骤方法&#xff0c;下面小编就给大家详细介绍自己手动重新安装Win…

win下oracle安装与navicat远程连接配置

oracle安装 navicat远程连接配置 1、打开navicat&#xff0c;工具>选项>环境 2、配置 找到oracle安装目录 3、连接

7.jvm对象内存布局

目录 概述对象里的三个区对象头验证代码控制台输出分析 验证2代码控制台输出 实例数据对其填充 访问对象结束 概述 jvm对象内存布局详解。 相关文章在此总结如下&#xff1a; 文章地址jvm基本知识地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址运行时数…

【C/PTA——8.数组2(课外实践)】

C/PTA——8.数组2&#xff08;课外实践&#xff09; 7-4 矩阵运算7-2 方阵循环右移7-3 螺旋方阵7-4 数组-杨辉三角7-5 数组-对角线求和7-6 数组-矩阵最小值 7-4 矩阵运算 #include<stdio.h> int main() {int n, i, j;int a[10][10] { 0 };scanf("%d", &n)…

CodeEase标准化的低代码平台

目录 一、引言二、网站简介三、网站特色四、为什么推荐这个网站&#xff1f;五、总结 一、引言 随着互联网的快速发展&#xff0c;我们每天都会浏览各种各样的网站。今天&#xff0c;我想向大家推荐一个独特而出色的网站——CodeEase&#xff0c;这是一个致力于为用户提供便捷…

LLM App ≈ 数据ETL管线

虽然现有的 LLM 应用程序工具&#xff08;例如 LangChain 和 LlamaIndex&#xff09;对于构建 LLM 应用程序非常有用&#xff0c;但在初始实验之外不建议使用它们的数据加载功能。 当我构建和测试我的LLM应用程序管道时&#xff0c;我能够感受到一些尚未开发和破解的方面的痛苦…

TrOCR模型微调【基于transformer的光学字符识别】

TrOCR&#xff08;基于 Transformer 的光学字符识别&#xff09;模型是性能最佳的 OCR 模型之一。 在我们之前的文章中&#xff0c;我们分析了它们在单行打印和手写文本上的表现。 然而&#xff0c;与任何其他深度学习模型一样&#xff0c;它们也有其局限性。 TrOCR 在处理开箱…

任正非说:要提高合同质量,使我们从广种薄收转向有效益的扩张。

你好&#xff01;这是华研荟【任正非说】系列的第38篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 华研荟注&#xff1a;前两天为大家分享了任正非先生讲话中关于IPD、ISC、LTC流程的一些内容。今天来看看任正非对于合同的要求…

Programming Abstractions in C阅读笔记:p196

《Programming Abstractions in C》学习第63天&#xff0c;p196总结。涉及到编程之外的知识&#xff0c;依然是读起来很费劲&#xff0c;需要了解作者在书中提到的人物(Edouard Lucas)、地点(Benares)、神话传说(Brahma)等等。虽然深知自己做不到对人文知识&#xff0c;历史知识…

【教3妹学编程-算法题】阈值距离内邻居最少的城市

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 立冬之后又开始降温了&#xff0c; 外面风吹的呼呼的。 3妹&#xff1a;今天还有雨&#xff0c;2哥上班记得带伞。 2哥 : 好的 3妹&#xff1a;哼&#xff0c;不喜欢冬天&#xff0c;也不喜欢下雨天&#xff0c;要是我…

Vue学习day01:追风记事本

文章目录 一、插值表达式二、Vue常用指令2.1 内容渲染指令2.2 条件渲染指令2.3 事件绑定指令2.4 属性绑定指令2.5 列表渲染指令2.6 双向绑定指令 三、案例&#xff1a;追风记事本 一、插值表达式 插值表达式是一种Vue的模板语法&#xff0c;我们可以用插值表达式渲染出Vue提供的…

通用的链栈实现(C++)

template<class T> class MyStack//链栈 { private:struct StackNode{T data;StackNode* next;StackNode(const T& val T(), StackNode* p nullptr) :data(val), next(p) {}//};StackNode* top;int cursize;void clone(const MyStack& s){Clear();cursize s.c…