Elasticsearch入门介绍及Linux安装

news2025/1/16 8:42:58

前言

Elasticsearch是一款分布式高性能的全文搜索引擎,为什么会需要这个呢,像我们平常使用的最多的存储工具就是Mysql,在业界也是非常有名的,我们大部分结构化数据都是用它来存储的,sql语言的操作也是非常方便,而且它也提供了索引机制,但是Mysql在一种特殊情况下搜索数据会非常慢,因为mysql使用的是正排索引,因此才有了Elasticsearch技术

正排索引和倒排索引

比如现在数据库上有如下的数据

id

name

content

1

周星驰

周星驰是个伟大的喜剧演员

2

周星星

周星星是个普通演员

3

刘德华

刘德华也是个很不错的演员

正排索引

假设我们使用mysql要查询content里面包含演员的数据出来,那我我们会写类似的语句查询

select * from user where content like '%演员%'

这个机制底层的原理是循环所有的数据,比如拿id为1的content属性然后跟%演员%进行匹配,如果符合那么就拿出来,很明显这种机制缺陷是很大的,假设你的数据有100万条呢?可想而知会有多慢,所以才会渐渐有了Elasticsearch这种技术(当然最先出来的是Lucene,Solr等,但是这里不讨论,有兴趣自己进行百度,顺便说一下,百度搜索其实就是Elasticsearch的使用场景)

倒排索引

那么Elasticsearch是如何解决正牌索引的呢,首先这里还有个概念,叫分词,这也是倒排索引的核心,理解了这个你就很容易理解倒排索引了

比如id为1的content为:周星驰是个伟大的喜剧演员,所谓的分词就是把这个句子进行拆分,但是如何拆分取决于分词器,你可以把分词器想象为一个工具,把一个句子根据特定的算法切割为几个词语,这里我假设分词器对句子分为了以下的内容

周星驰、是个伟大的、喜剧、演员

Elasticsearch会维护一种倒排索引表,解设id为1的倒排索引变会这么记录

这里的id是倒排索引表的,word是拆的词,index是上面表格的id

id

word

index

1

周星驰

1

2

是个伟大的

1

3

喜剧

1

4

演员

1

接着我们再对id为2,3的数据进行分词(注意下面都是解设),最终的数据结果如下

id

word

index

1

周星驰

1

2

是个伟大的

1

3

喜剧

1

4

演员

1

5

周星星

2

6

是个普通

2

7

演员

2

8

刘德华

3

9

也是个很不错的

3

10

演员

3

很明显,上面的数据是有重复的,所以会被合并为以下的结构,如下

id

word

index

1

周星驰

1

2

是个伟大的

1

3

喜剧

1

4

演员

1、2、3

5

周星星

2

6

是个普通

2

7

刘德华

3

8

也是个很不错的

3

这样一来就形成了倒排索引表,在查包含演员的数据时,会先在这张表进行查询到1、2、3,然后再根据索引去真正的数据进行查询,效率可是会快很多的

可能有人会疑问,如果倒排索引表也很大,那不是有正排索引的问题吗?其实是没有的,因为词语的个数是有限的,而用词语组成的文章是无限的,就比如演员这个索引可以用来索引很多个句子,而如果用演员来造句成为一个内容,那可以造无限的句子

Elasticsearch安装

原生Linux安装

首先,你需要下载安装包,这里推荐一个网站进行下载:https://www.elastic.co/cn/downloads/这里的产品比较全,还有后面要安装的Kibana组件,唯一缺点是网站比较卡.....

Elasticsearch 下载:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

我这里下载的是7.1.3版本的:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-3

下载完就可以进行安装了,一些核心的步骤这里会说下

首先把下载的Linux包上传到服务器上,我这里是放到了 /opt下面

然后进行解压,命令为

tar -zxvf elasticsearch-7.17.3-linux-x86_64.tar.gz

Elasticsearch是需要依赖jdk的,我们可以直接使用他提供的就行了,位置在你解压后的内容中

这里我们只需要配置一个全局变量,Elasticsearch就可以使用,使用如下步骤配置

vim /etc/profile 打开profile文件,直接拉到最后输入内容,地址自己修改

export ES_JAVA_HOME=/opt/elasticsearch-7.17.3/jdk 
保存后执行如下操作

source /etc/profile #让配置文件生效

echo $ES_JAVA_HOME #看是否配置成功,如果出现下图就是成功了

打开/opt/elasticsearch-7.17.3/config/elasticsearch.yml文件,配置意思如下,挑你需要的进行修改

network.host: 0.0.0.0 #所有机器都可以访问
http.port: 9200 #对外暴漏的http端口,默认不改就是9200
path.data: /path/to/data #数据位置
path.logs: /path/to/logs #日志位置
discovery.seed_hosts: ["192.168.0.90"] #写你的ip就行了 cluster.initial_master_nodes: ["node-1"]
node.name: node-1 #跟上面的一致

接着第一个问题就是jvm内存问题,默认情况下Elasticsearch会使用4g内存启动,但是我们有时可能只是自己要试一下,内存太少,这个时候可以修改文件,/opt/elasticsearch-7.17.3/config/jvm.options 加入以下配置:我这里改为了1g

-Xms1g
-Xmx1g

到这里配置就完了,就可以运行了,启动命令为:/opt/elasticsearch-7.17.3/bin/elasticsearch ,但是如果你是root用户是启动不了的,这是es做的一个控制,解设你在root用户直接去启动,会报如下的错

所以我们一般需要创建一个单独的用户来管理Elasticsearch,如下是创建命令

adduser es #创建用户名es,名字你随意
passwd es #为es用户设置密码
chown -R es:es . #到你的es目录下设置当前目录的权限给es用户

创建好后切换到es用户进行启动 如果你是在root账号下可以使用 su es 切换到es用进行启动,但是你仍然可能会启动以下几个问题

启动可能会有的问题

问题一

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

ES因为需要大量的创建索引文件,需要大量的打开系统的文件,所以我们需要解除linux系统当中打开文件最大数目的限制,不然ES启动就会抛错

#切换到root用户
vim /etc/security/limits.conf

末尾添加如下配置: 前面的*表示启动es的用户,比如我这里应该是es
  *        soft     nofile     65536
  *     hard     nofile     65536
  *     soft     nproc     4096
  *        hard     nproc     4096

注意,修改完以后需要重启,如果重启还是不行建议参考一下这篇文章

https://blog.csdn.net/qq_41378597/article/details/103706237

我也是边写博客边安装的,,,,有问题就顺便总结在这里了,,,,

问题二

max number of threads [1024] for user [es] is too low, increase to at least [4096]

无法创建本地线程问题,用户最大可创建线程数太小

vim /etc/security/limits.d/20-nproc.conf

改为如下配置:
* soft nproc 4096

问题三

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

最大虚拟内存太小,调大系统的虚拟内存

vim /etc/sysctl.conf
追加以下内容:
vm.max_map_count=262144
保存退出之后执行如下命令:
sysctl -p

问题四

the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

缺少默认配置,至少需要配置discovery.seed_hosts/discovery.seed_providers/cluster.initial_master_nodes中的一个参数.

  • discovery.seed_hosts: 集群主机列表

  • discovery.seed_providers: 基于配置文件配置集群主机列表

  • cluster.initial_master_nodes: 启动时初始化的参与选主的node,生产环境必填

vim config/elasticsearch.yml
#添加配置
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["node-1"]

#或者  单节点(集群单节点)
discovery.type: single-node

以上可能是你会遇到的问题,处理完以后在执行启动命令看到如下的数据就是成功了

然后访问你ip的地址,看到如下就是成功了: http://192.168.0.90:9200/

注意,如果不成功的话请看下防火墙关闭或者端口通不通

centos7关闭防火墙命令:systemctl stop firewalld.service

到此为止我们就安装玩了

使用Docker安装

如果不懂Docker可以参考我之前的文章

https://blog.csdn.net/zxc_user/article/details/128517677?spm=1001.2014.3001.5501

至于Docker的安装就非常简单了,就几条命令,如下

docker network create elastic
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.13.4
docker run --name es01-test --net elastic -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.13.4

详情请参考官网文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.13/getting-started.html

以上就是Elasticsearch的安装的两种方式了

Elasticsearch操作

那么我们如何操作Elasticsearch呢?Elasticsearch提供了rest风格的yapi,我们可以同过postman工具来进行操作,如下是添加一个索引

如上就操作成功了,但是很明显这种操作很麻烦,接口一多我们需要记录好多,所以Elasticsearch又提供了一个界面工具,叫Kibana

Kibana

用于操作Elasticsearch的界面工具,使用非常方便

安装

首先要进行安装,到官网:https://www.elastic.co/cn/downloads/past-releases#kibana

下载完以后上传到linux中,如下,版本最好跟Elasticsearch一致

首先进行解压

tar -zxvf kibana-7.17.3-linux-x86_64.tar.gz

修改文件,如下

server.port: 5601  #对外暴露的端口
server.host: "192.168.0.90"  #服务器ip,Kibana的访问地址
elasticsearch.hosts: ["http://localhost:9200"]  #elasticsearch的访问地址
i18n.locale: "zh-CN"   #Kibana汉化

运行Kibana

注意:kibana也需要非root用户启动

这里为了简单,就直接用es账号启动了,你也可以创建个专门的账号进行启动,记得要先把目录改为对应用户可以使用的

使用命令 ./bin/kibana 启动,看到如下界面就是成功了

使用

http://192.168.0.90:5601/ 访问你本地的进入下面的界面

再选择DevTools工具

创建索引zxc1.如下

程序后台启动

上面的Elasticsearch和Kibana都是在前台启动的,一旦服务器关闭就会掉线了,可以使用命令进行后台启动

Elasticsearch后台启动

./elasticsearch-7.17.3/bin/elasticsearch -d

Kibana后台启动,注:Kibana启动可能比较久,请耐心等待,可以通过tail -f nohup.out查看日志

nohup ./bin/kibana &

总结

我是边安装,边写博客,边解决问题,从9点半弄到现在,用了好几个小时,不过我强烈建议你自己操作下,虽然并不难,但是你操作过就会有个印象,就像我之前玩docker一样,大家加油

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

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

相关文章

助力“智慧港口”建设,北部湾港联合美创打造的主数据管理系统上线!

数字化浪潮下,港口企业发展将致力于以数据价值提升和数据价值创造为目标,打造新型“智慧港口”,实现更加经济的港口资源统筹高效利用并降低各类成本,企业通过逐步转变信息资源管理工作模式和利用方式,深度应用新一代信…

在GCP上创建Cloud SQL的三种方式(Console,gcloud,Terraform)

1 简介 Cloud SQL 是GCP上的关系型数据库,常用的有三种方式来创建: (1) 界面操作 (2) 命令行 gcloud (3) Terraform 在开始之前,可以查看:《初始化一个GCP项目并用gcloud访问操作》。 2 GCP 操作界面 登陆GCP,选…

Chevereto V4 首页显示图片托管数量的实现方法

博主最近一直想在Chevereto V4 首页显示图片托管数量,但是网上的方法只针对于Chevereto V3,V4却没有相关教程,查询谷歌也无结果,经博主查询大量案例今天为大家分享一下 Chevereto V4 首页显示图片托管数量的实现方法。1. 修改后台…

70.语义分割和数据集

在 之前讨论的目标检测问题中,我们一直使用方形边界框来标注和预测图像中的目标。 本节将探讨语义分割(semantic segmentation)问题,它重点关注于如何将图像分割成属于不同语义类别的区域。 与目标检测不同,语义分割可…

20230112编译AIO-3568J的Buildroot(rk356x_linux_release_v1.3.0b_20221213)

20230112编译AIO-3568J的Buildroot(rk356x_linux_release_v1.3.0b_20221213) 2023/1/12 20:40 当前可以拿到的Buildroot的SDK; rk356x_linux_release_v1.0.0_20210511_split_dir rk356x_linux_release_v1.2.0_20211019_split_dir rk356x_linu…

Ventoy主题美化,以及自行制作方法

Ventoy是基于grub2 所制作的,所以可以自行制作或者将现成的主题套用到Ventoy 方法一: 主题下载地址 上面是两个可以直接使用的Ventoy主题地址,然后下载下来解压文件,我们可以得到 接着往下走,我们可以的得到 现在我们…

Oracle Apex低码平台-定制验证方案

Oracle Apex低码平台-定制验证方案 0 APEX简介: Oracle APEX 是一个低代码开发平台,您可以在该平台上构建可扩展的安全企业应用程序。这些应用程序具有先进的功能,而且可以在任何地方部署。 构建企业应用速度提高 20 倍,代码减…

Dubbo服务降级

Dubbo服务降级 1. 为什么需要服务降级 RPC 是解决分布式系统通信问题的一大利器,而分布式系统的一大特点就是高并发,所以说 RPC 也会面临高并发的场景。在这样的情况下,我们提供服务的每个服务节点就都可能由于访问量过大而引起一系列的问题…

Chrome浏览器插件推荐【第一期】

1、Tampermonkey Tampermonkey(油猴)是一款免费的浏览器扩展和最为流行的用户脚本管理器,它适用于 Chrome, Microsoft Edge, Safari, Opera Next, 和 Firefox。虽然有些受支持的浏览器拥有原生的用户脚本支持,但 Tampermonkey 将在…

Webpack的应用

处理css文件 总共有src目录下的index.css和index.js、同根的index.html和webpack.config.js文件,然后npm init之后生成package.json文件,npm install后生成package-lock.json文件,最后npm run webpack之后有dist目录下各种文件 index.js i…

nodejs使JWT(全)

Token token表示令牌,用户的登录凭证。 基于 Token 的身份验证方法,使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的: 客户端使用用户名跟密码请求登录服务端收到请求,去验证…

css动画效果之transform

transformTransform属性应用于元素的2D或3D转换。这个属性允许你将元素旋转,缩放,移动,倾斜等。旋转rotate、扭曲skew、移动translate、缩放scale、矩阵变形matrix属性名扩展写法属性含义none定义不进行转换。rotaterotateX()(3D写…

rabbitmq+netcore6 【5】Topics:主题

文章目录1)前言2)Topic exchange 主题交换机3)举例4)总结5)综合以上代码准备工作生产者消费者1消费者2结果验证官网参考链接: https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html其他人的翻译版…

臻图信息搭建智慧水务管理平台,保障供水安全运行

伴随着城市智慧化进程,供水系统也在朝着高度集成化、数字化、智能化的管理模式发展。在2022年,水利部也印发了相关水务保障规划,对供水工程的建设、运行管理、水源保护等管理提出了明确要求,采取物联网、互联网等措施,…

从“以旧换新”送手机看年礼消费新风尚

千门万户曈曈日,总把新桃换旧符。每年的春节,都是中国人辞旧迎新的重要时刻。在新春年礼的选择上,曾经的“烟酒糖茶”老四样正在逐渐被其他新潮年礼所替代,手机等诸多科技好物被纳入到送年礼清单。手机年货很“潮”,让…

Redis整理合集

SQL和NOSQL的区别?SQLNOSQL数据结构结构化非结构化数据关联关联的非关联的查询方式SQL查询非SQL查询事物特性ACID(事务)BASE存储方式磁盘内存扩展性垂直水平使用场景数据结构固定相对业务对数据的安全性一致性需求较高数据结构不固定对一致性、安全性需…

论文投稿指南——中文核心期刊推荐(地质学 2)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

【性能优化】Mybatis Plus:优化查询速度 - SQL替换Service

优化查询速度 - SQL替换Service Service 接口问题 下面是原先的 Service 实现类代码,有门店 ID、订单状态、查询时间段,然后查出了所有的结果,继续使用 java8 的特性获取汇总结果,随着项目的推移,数据量越来越大&…

Webpack 中使用source map 在开发过程中进行调试

我们都知道webpack在打包的时候会将源代码打包成一个bundle文件,bundle文件就是经过了loader转换,还有webpack的一些插件处理,以及webpack构建过程中的一些转换,最后会生成一个大的JS文件,直接去看这个文件是没法调试的…

【React】一.React基本使用

目录 基本介绍 一.React基本使用 安装命令 使用方法 记录问题 使用React脚手架初始化项目 基本介绍 构建用户界面的js库用户界面可以理解为html页面(前端)react主要用来写html页面或者构建web应用只负责视图层(V)的渲染。&am…