Elasticsearch概念 使用docker安装Elasticsearch和kibana

目录

一、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 ikunzip 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.mzph.cn/diannao/4415.shtml

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

相关文章

WEB攻防-.NET特性常见漏洞

目录 前置知识: DLL文件 .NET和DLL文件 C#和DLL文件 关系总结 .NET 配置调试-信息泄露 .NET 源码反编译-DLL 反编译与未授权访问 编译DLL文件 反编译DLL文件 注意事项 案例: 验证代码文件有没有可以绕过(Cookie&Session&…

【C++】二叉树的进阶

二叉树的进阶 二叉搜索树概念操作实现创建树形结构拷贝构造函数构造函数析构函数赋值运算符重载循环版本查找插入删除 递归版本查找插入删除 应用K模型KV模型性能分析 二叉树进阶面试题二叉树创建字符串二叉树的分层遍历I最近公共祖先二叉搜索树与双向链表前序遍历与中序遍历构…

PyCharm 无法运行的解决方案

问题: PyCharm 无法运行,该怎么办? 解决方案: 1. 检查 Python 解释器 确保已为 PyCharm 配置正确的 Python 解释器。打开 PyCharm,转到“文件”>“设置”>“项目”>“Python 解释器”。选择所需的 Python …

数组和指针经典笔试题讲解下

目录 创作不易,如对您帮助,还望一键三连,谢谢!!! 题目一: 题目二: 题目三: 题目四: 题目五: 题目六: 题目七: 创作…

震惊!某省图书馆竟然可以注册后直接访问知网并下载文章?

四川省图书馆 使用说明 1.点击进入https://portal.sclib.org/interlibSSO/main/main.jsp 显示如下: 2.关注四川省图书馆公众号并注册 3.点击馆外登录并使用刚注册的用户名密码登录 显示如下: 4.登录成功后跳转至首页并点击cnki即可正常使用

2024年最新一线互联网企业高级软件测试工程师面试题大全

1、功能测试 功能测试是游戏测试中跟“玩游戏”最相关的一个环节。 当然这里的“玩”不是要真的让你感受快乐,而是要通过“玩”游戏,发现存在的问题或不合理的地方。因此,这个“玩”的过程基本不会感受到游戏的乐趣。事实上,每一次…

低代码+定制物资管理:创新解决方案探析

引言 在当今快速变化的商业环境中,企业面临着不断增长的挑战,如提高效率、降低成本、满足客户需求等。为了应对这些挑战,企业需要不断创新并采用先进的技术解决方案。在这样的背景下,低代码开发和定制化物资管理成为了引领企业变…

【3GPP】【核心网】【5G】5G核心网协议解析(四)(超详细)

1. 欢迎大家订阅和关注,精讲3GPP通信协议(2G/3G/4G/5G/IMS)知识点,专栏会持续更新中.....敬请期待! 目录 1. NGAP 按流程功能分类 1.1 接口管理过程 1.1.1 NG Setup 1.2.1 NAS消息传输过程 Transport of NAS Messa…

Android 14设置android:importantForAutofill=“no“无效

密码输入框EditText不希望弹出Google的是否保存密码弹出框, 直接设置了android:importantForAutofill"no", android:inputType"textPassword|textNoSuggestions"在安卓12手机上有效,但是在安卓14上面就不行了&#xff0…

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性

记一次JSON.toJSONString()转换时非属性方法空指针异常排查及toJSONString保留null值属性 异常详情 有一个类,里面有两个属性和一个类似工具的getRealName()方法如下: getRealName()方法就是获取这个人的真实名字,如果获取不到就以name返回…

堆的介绍,实现,使用(c语言实现)

目录 堆的概念 堆的性质: 堆的分类 父子结点的下标关系 堆的向下调整算法 ​编辑小堆 大堆 建堆 堆的向上调整算法 小堆 大堆 堆的基本操作 定义堆 初始化堆 销毁堆 打印堆 堆的插入 堆的删除 大堆(Max Heap)的向下调整算法…

Java 设计模式(上)

目录 一、单一职责原则 二、开闭原则 三、里氏替换原则 四、迪米特法则 五、接口隔离原则 六、依赖倒置原则 七、工厂方法 八、抽象工厂 九、建造者模式 十、原型模式 十一、单例模式 十二、适配器模式 一、单一职责原则 单一职责原则又称单一功能原则,…

回溯-单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相…

SpringMVC深解--一起学习吧之架构

SpringMVC的工作原理主要基于请求驱动,它采用了前端控制器模式来进行设计。以下是SpringMVC工作原理的详细解释: 请求接收与分发: 当用户发送一个请求到Web服务器时,这个请求首先会被SpringMVC的前端控制器(Dispatche…

关于远程桌面端口的优化措施的建议

在信息技术的世界中,远程桌面连接已成为企业、教育和个人用户之间共享信息、协作工作的重要工具。而这一切的背后,都离不开远程桌面端口(RDP,Remote Desktop Protocol Port)的支持。RDP端口不仅关乎到远程访问的顺畅性…

【Linux】进程信号 -- 详解

⚪前言 注意:进程间通信中的信号量跟下面要讲的信号没有任何关系。 一、从不同角度理解信号 1、生活角度的信号 你在网上买了很多件商品,在等待不同商品快递的到来。但即便快递没有到来,你也知道快递来临时,你该怎么处理快递&a…

CDA认证:数据行业领跑者,告别危机和低谷!

近日,人力资源社会保障部、中央组织部、中央网信办、国家发展改革委、教育部、科技部、工业和信息化部、财政部、国家数据局等九部门印发《加快数字人才培育支撑数字经济发展行动方案(2024—2026年)》(以下简称《行动方案》&#…

LeetCode39题: 组合总和(原创)

【题目描述】 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复…

[NISACTF 2022]bilala的二维码

​​​​​​​NSSCTF{M0RS34ND282X231} 还有一个是像素我找不到

Orange3数据可视化(树查看器-决策树)

树视图 分类和回归树的可视化。 输入 树:决策树 输出 选中的数据:从树节点中选中的实例 数据:带有额外一列,显示每个点是否被选中 这是一个多功能的小部件,用于展示分类和回归树的2D可视化。用户可以选择一个节点…