Elasticsearch概念 使用docker安装Elasticsearch和kibana

news2024/12/26 11:16:34

目录

一、Elasticsearch概念

倒排索引和正向索引

正向和倒排

二、ES安装

三、安装 kibana

四、IK分词器

下载ES中文分词器

扩展或停用词条


一、Elasticsearch概念

倒排索引和正向索引

正向索引

        就像在mysql数据中搜索非主键字段的内容,就需要逐条数据的去查,比如加where条件,逐行扫描,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。当数据量达到数百万时,就是一场灾难。

倒排索引

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息

  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条

 比如以下图片中,小米词条在表数据id为1、3、4中有,文档id就就为1、3、4

 倒排索引的搜索流程如下(以搜索"小米手环"为例):

1)用户输入条件"小米手环""进行搜索。

2)对用户输入内容分词,得到词条:小米、手环。

3)拿着词条在倒排索引中查找,可以得到包含词条的文档id:1、3、4。

4)拿着文档id到正向索引中查找具体文档。

正向和倒排

那么为什么一个叫做正向索引,一个叫做倒排索引呢?

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

是不是恰好反过来了?

那么两者方式的优缺点是什么呢?

正向索引

  • 优点:

    • 可以给多个字段创建索引

    • 根据索引字段搜索、排序速度非常快

  • 缺点:

    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引

  • 优点:

    • 根据词条搜索、模糊搜索时,速度非常快

  • 缺点:

    • 只能给词条创建索引,而不是字段

    • 无法根据字段做排序

ES是面向文档存储的,可以是数据库中的一条商品数据,一个顶单信息

文档信息会被序列化为JSON格式后存储在ES中

索引(index):相同类型的文档集合

映射(mapping):索引中文档的字段约束信息,类似表的结构约束

比如:

我们统一的把Mysql与ES的概念做一下对比:

MySQLElasticsearch说明
TableIndex索引(index),就是文档的集合,类似数据库的表(table)
RowDocument文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
ColumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
SchemaMappingMapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)
SQLDSLDSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

Mysql:擅长事务类型操作,可以确保数据的安全和一致性

Elasticsearch:擅长海量数据的搜索、分析、计算

Mysql和ES是互补关系,在合适的场景下选择合适的技术

二、ES安装

创建docker网络,在同一网络中的容器可以互联,相互访问

docker network create es-network

 查看已存在的网络

sudo docker network ls

注意】ES docker 镜像的版本为7.17.16 后续安装IK分词器的版本也要与之对应,否则启动报错,kibana版本也最好与之对应

拉取镜像:

sudo docker pull elasticsearch:7.17.16

使用 -m 标志为容器设置内存限制。这样就无需手动设置 JVM 大小了

  • -e "discovery.type=single-node":非集群模式

  • -e "http.host=0.0.0.0":监听的地址,可以外网访问

  • -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录

  • -v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录

  • -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录

  • 9200:供用户访问端口

  • 9300:个es结点互访的端口,现在非必须 

sudo docker run -d \
    --net es-network \
    -m 1GB \
	--name es \
    -e "discovery.type=single-node" \
    -v ./es/data:/usr/share/elasticsearch/data \
    -v ./es/plugins:/usr/share/elasticsearch/plugins \
    -v ./es/logs:/usr/share/elasticsearch/logs \
    --privileged \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.17.16

注意要在es/data所在目录下运行,或者改为绝对路径

ES启动有些许慢,可通过ES容器日志查看进度

 sudo docker logs --tail 100 -f es

ElasticSearch文件目录说明

目录说明
bin可执行文件目录
config配置文件目录
jdkJAVA工具包
lib第三方依赖库
logs输出日志目录
modules依赖模块目录
plugins插件目录
data数据存储目录

在浏览器中输入IP+端口访问:http://172.30.171.205:9200 即可看到elasticsearch的响应结果:

三、安装 kibana

kibana可以给我们提供一个elasticsearch的可视化界面,便于学习

拉取镜像:

sudo docker pull kibana:7.17.18

启动kibana容器

与ES需要在同一个网络es-network

添加环境变量ELASTICSEARCH_HOSTS指定ES访问地址,因为在同一个网络下,可以使用主机名es代替IP地址

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

 浏览器访问 kibana, http://172.30.171.205:5601

Add integrations:从如何来源添加数据 ; Explore on my own :自己探索,这里我们自己探索

使用Dev Tools对Elasticsearch发送DSL请求,点击旁边三杆,向下翻找到Dev Tools

输入DSL语句查询所有数据,点击三角发送请求

四、IK分词器

        使用默认的ES的分词器对中文的分词效果不好,可以发现ES英文分词效果可以,但是对中文只能一个字一个字的分,在搜索时效率低,并且搜不到自己想要的。所以要下载IK分词器,添加插件

 分词器的作用是什么?

  • 创建倒排索引时对文档分词

  • 用户搜索时,对输入的内容分词

查看ES插件数据卷目录挂在地址,也可以使用自己自己启动容器指定的目录,我的是:-v ./es/plugins:/usr/share/elasticsearch/plugins:

sudo docker volume inspect es-plugins

下载ES中文分词器

前往github上下载:https://github.com/medcl/elasticsearch-analysis-ik/releases,选择版本为7.17.16,复制链接地址

进入挂载目录下(es/plugins),服务器中使用wget命令下载

wget https://github.com/infinilabs/analysis-ik/releases/download/v7.17.16/elasticsearch-analysis-ik-7.17.16.zip

 创建ik目录,并将下载的压缩包解压到当前目录下

mkdir ik

unzip elasticsearch-analysis-ik-7.17.16.zip -d ./ik

 或者将压缩包解压后拖入挂载目录下,并重命名为ik

mv elasticsearch-analysis-ik-7.17.16/ ik

 重启ES容器:

sudo docker restart es

IK分词器的分词模式

  • ik_smart:智能切分,粗粒度

  • ik_max_word:最细切分,细粒度

扩展或停用词条

在plugins/ik/config目录下找到 IKAnalyzer.cfg.xml 文件设置添加词条或停用词条的文件地址,这里是当前的config目录下

拓展词条

添加扩展词条,一些网络流词等词库中没有,新建ext.dic文件添加内容,这样就可以对这些没有的不能分词的词进行分词了

停用词条

目录下的stopword.dir文件中添加停用词

比如语气词,敏感词等

  • 利用config目录的IkAnalyzer.cfg.xml文件添加拓展词典和停用词典

  • 在词典中添加拓展词条或者停用词条

修改后需要重启ES容器,就可以根据自己添加或停用的词进行分词了。

我遇到的问题:

        7.17.20版本的ES没有对应的IK分词器版本,启动ES容器会报错

        7.17.18版本的ES容器,非root用户启动,有莫名的权限问题,贴在评论区了

        所以我改成了7.17.16版本的ES,启动正常,但是如果你是非root用户启动,也不是自己创建的数据卷挂载目录,需要修改es挂载目录 ./es 权限:
 

sudo chown -R teacher:teacher ./es/

END

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

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

相关文章

IDM下载器_Internet Download Manager 6.42.7

网盘下载 IDM下载器是一款针对互联网所打造的下载管理器。IDM下载器能将下载速度提高5倍,恢复因丢失的连接,网络问题,计算机关闭或意外断电而重新启动中断或中断的下载。IDM下载器还可支持所有流行的浏览器,以使用独特的“高级浏…

记录一次 vue3 + ele pls 改写 饿了么主题色实践

一、改写 element 主题色 在 main.ts 中引入需要改写的 scss 文件 main.ts: import ./styles/element-plus.scss在自定义的 element-plus.scss 文件中改写 ele pls 的变量 element-plus.scss: /** * 更改主题色 */ :root {--el-color-primary: #285fbb; // 主…

【智能算法】土拨鼠优化算法(PDO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年,AE Ezugwu等人受到土拨鼠觅食行为与自然行为启发,提出了土拨鼠优化算法(Prairie Dog Optimization algorithm, PDO)。 2.算法原理 2.1算法思…

取地址及const取地址操作符重载

这两个默认成员函数一般不用重新定义 ,编译器默认会生成。 class Date { public : //这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需 //要重载,比如想让别人获取到指定的内容…

第十五届蓝桥杯省赛第二场PythonB组A题【进制】题解(AC)

解题思路 按照题意进行模拟,计算 x x x 的 b b b 进制过程中,若出现余数大于 9 9 9,则说明 x x x 的 b b b 进制一定要用字母进行表示。 x 8100178706957568def check(x, b):while x:if x % b > 10:return Falsex // breturn True…

网络准入设备和软件有哪些 推荐八款网络准入设备

网络准入设备是确保网络安全的重要组成部分,它们负责控制和管理哪些设备能够接入网络以及如何接入。以下是一些常见的网络准入设备和软件。 1.认证服务器: 这是网络准入控制的核心组件,负责对用户或设备进行身份验证。常见的认证协议包括RAD…

【GitHub】主页简历优化

【github主页】优化简历 写在最前面一、新建秘密仓库二、插件卡片配置1、仓库状态统计2、Most used languages(GitHub 常用语言统计)使用细则 3、Visitor Badge(GitHub 访客徽章)4、社交统计5、打字特效6、省略展示小猫 &#x1f…

echarts实现水滴图

使用echarts实现水滴图 引入依赖&#xff0c;echarts-liquidfill3兼容echarts5; 安装依赖 "echarts": "^5.4.3","echarts-liquidfill": "^3.1.0",npm install echarts-liquidfill3.1.0 -S实现的效果图 构建一个水滴图的页面 <tem…

动态规划|714.买卖股票的最佳时机含手续费

力扣题目链接 class Solution { public:int maxProfit(vector<int>& prices, int fee) {int n prices.size();vector<vector<int>> dp(n, vector<int>(2, 0));dp[0][0] - prices[0]; // 持股票for (int i 1; i < n; i) {dp[i][0] max(dp[i …

交直流充电桩检测的基础知识

交直流充电桩检测是电动汽车充电设施的重要组成部分&#xff0c;其目的是确保充电桩的正常运行&#xff0c;保障电动汽车的安全充电。以下是关于交直流充电桩检测的一些基础知识。 我们需要了解什么是交直流充电桩&#xff0c;简单来说&#xff0c;交直流充电桩是一种为电动汽车…

本地部署 Meta Llama3-8b

Meta Llama 3(8B) Instruct model performance Meta Llama 3(8B) Pre-trained model performance 使用 Ollama 运行 Llama3 访问 Tags llama3&#xff0c;选择你想运行的模型&#xff0c;例如&#xff0c;8b-instruct-q8_0 拷贝并运行命令&#xff0c;ollama run llama3:8b-…

快速计算乘法法则

快速计算乘法法则 简便算法的原理算法的实现1.和为偶数2.和为奇数3.总结及注意事项 实战演练 简便算法的原理 我们发现乘法一共只有两种&#xff0c;分别是两因数和为奇数与和为偶数。和为奇数的两数之和总可以拆成两个相邻的数&#xff08;如 13 6 7 13 67 1367&#xff…

【论文阅读】ESRT-Transformer for Single Image Super-Resolution

ESRT-Transformer for Single Image Super-Resolution 论文地址摘要1. 引言2.相关工作2.1 基于 CNN 的 SISR 模型2.2 Vision Transformer Transformer 3. Efficient Super-Resolution Transformer3.1. Lightweight CNN Backbone (LCB)3.2. High-frequency Filtering Module (HF…

(十一)Servlet教程——Request请求转发

1.Web应用在处理客户端的请求的时候&#xff0c;一般的时候都需要多个资源协同处理&#xff0c;比如先经过一个Servlet的处理&#xff0c;然后再经过另外一个Servlet的处理。但是在一个Servlet中又不能直接调用另外一个Servlet的service方法&#xff0c;所以Servlet就提供了请求…

c++ primer plus(2)

前言 延续上一讲的内容&#xff0c;今天来写一写这本书的第三章&#xff1a;处理数据 好吧&#xff0c;本次博客仍然是总结重点内容 简单变量 在本书中变量有三个属性 1信息存储在什么地方 2要存储什么 3存储类型 比如 int braincount; braincount5; 这两行代码体现了…

找不到mfc140u.dll文件如何处理?这三种方法帮你快速修复mfc140u.dll

当你的电脑出现提示&#xff0c;显示找不到mfc140u.dll文件&#xff0c;从而无法继续执行代码&#xff0c;你需要知道如何应对这种情况。今天我们就来详细说明如何解决mfc140u.dll文件丢失的问题&#xff0c;并对该文件进行详细分析。这个文件是Microsoft Visual Studio的一个重…

Vue从入门到精通-01-Vue的介绍和vue-cli

MVVM模式 Model&#xff1a;负责数据存储 View&#xff1a;负责页面展示 View Model&#xff1a;负责业务逻辑处理&#xff08;比如Ajax请求等&#xff09;&#xff0c;对数据进行加工后交给视图展示 关于框架 为什么要学习流行框架 1、企业为了提高开发效率&#xff1a;…

idea的插件,反编译整个jar包

idea的插件&#xff0c;反编译整个jar包 1.安装插件1.1找到插件1.2 搜索插件 2.反编译整个jar包2.1 复制jar包到工件目录下&#xff1a;2.2 选中jar包&#xff0c;点出右键 3.不用插件&#xff0c;手动查看某一个java类3.1 选中jar包&#xff0c;点出右键 1.安装插件 1.1找到插…

VPN的基本概念

随着互联网的普及和应用的广泛&#xff0c;网络安全和隐私保护越来越受到人们的关注。在这个信息爆炸的时代&#xff0c;我们的个人信息、数据通信可能会受到各种威胁&#xff0c;如何保护自己的隐私和数据安全成为了一个迫切的问题。而VPN&#xff08;Virtual Private Network…

用Jenkins Gerrit-Trigger插件实现提交gerrit后自动启动编译验证

说明&#xff1a;如果没有gerrit-trigger&#xff0c;说明缺少插件&#xff0c;先安装插件即可。 步骤 1.在Jenkins首页点击Manage Jenkins 2.点击Gerrit Trigger 3.配置gerrit服务器 下图是已配置好的gerrit服务器&#xff0c;配置完毕记得点击status下面的按钮进行测试服务…