Elasticsearch7.3.2通俗易懂

news2024/12/27 13:07:49

文章目录

  • 一、安装
    • 1.步骤
    • 2.报错
      • (1) can not run elasticsearch as root
      • (2) could not find java in JAVA_HOME or bundled at ...
      • (3) Error: Could not find or load main class XXX.JavaVersionChecker
      • (4)BindTransportException[Failed to bind to [9300-9400]]
      • (5)max virtual memory areas vm.max_map_count [65530] is too low
      • (6)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
  • 二、Kibana
    • 1.安装
    • 2.报错
      • (1)cluster. Error: No Living connections
      • (2)FATAL Port 5601 is already in use. Another instance of Kibana may be running!
  • 三、核心概念
    • 1.逻辑设计
    • 2.物理设计
  • 四、IK分词器
    • 1.安装
    • 2.功能测试
    • 3.扩展字典
  • 五、Rest
  • 其他
    • elasticdump插件导入导出数据
  • 参考


一、安装

1.步骤

-Elasticsearch Service 上创建部署时,将自动设置一个主节点和两个数据节点。
- 通过从 tar 或 zip 存档安装,可以在本地启动 Elasticsearch 的多个实例,以查看多节点集群的行为。
  • 下载
cd /usr/local # 进入此目录
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-linux-x86_64.tar.gz
  • 解压
tar -xvf elasticsearch-7.3.2-linux-x86_64.tar.gz
mv elasticsearch-7.3.2 elasticsearch7
  • 创建非root用户
groupadd devGroup # 添加用户组devGroup
useradd es -g devGroup -p password # -g 指定组 -p 密码
chown es:devGroup -R elasticsearch7/ # -R 处理指定目录以及其子目录下的所有文件
  • 启动
su es # 切换用户es
/usr/local/elasticsearch7/bin/elasticsearch # 启动Elasticsearch
  • 访问
浏览器中访问http://ip地址:9200

2.报错

(1) can not run elasticsearch as root

进入elasticsearch-7.3.2/bin目录下执行./elasticsearch时出现了这个错误,原因就是es因为安全问题拒绝使用root用户启动。解决办法就是创建非root用户。

(2) could not find java in JAVA_HOME or bundled at …

出现这个问题,要么是没装jdk,要么是环境变量有问题。于是我突然意识到自己还没装jdk,下面来安装jdk。

  • 下载安装包

下载jdk-8u333-linux-x64.tar.gz

  • 将安装包上传至Linux系统中去

由于我是部署在自己的云服务器上,因此用的xshell内置的ftp文件传输工具将下载的tar.gz上传至linux服务器上。

  • 解压
sudo tar -zxvf jdk-8u333-linux-x64.tar.gz
  • 创建路径
mkdir /usr/local/java
  • 将解压后的jdk移动至新建的文件夹中去
sudo mv jdk1.8.0_333 /usr/local/java
  • 配置系统环境变量

看到网上很多教程都是修改的用户配置文件/etc/profile,实际上应该修改的是系统配置文件。

vim ~/.bashrc # 编辑系统配置文件

按下i,然后将以下配置粘贴到最末尾:

export JAVA_HOME=/usr/local/java/jdk1.8.0_333  
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH

然后按下esc键,输入:wq并回车保存配置。

  • 检验jdk是否成功安装
java -version

(3) Error: Could not find or load main class XXX.JavaVersionChecker

额,想不到在排除了以上几个问题后,启动Elasticsearch服务时还是抽风了。

出现这个问题的原因就是,我们需要切换到非root用户去启动Elasticsearch服务,但实际上Elasticsearch被我们安装到了root目录下。

  • 将Elasticsearch移动到用户目录中去
mv elasticsearch-7.3.2 /usr/local
  • 再次启动
cd /usr/local/elasticsearch-7.3.2/bin # 进入目录
su es # 切换用户es
./elasticsearch # 启动Elasticsearch

感动,这次终于成功了:
在这里插入图片描述

(4)BindTransportException[Failed to bind to [9300-9400]]

报这个错说明服务器ip配置不对,修改elasticsearch.yml中network.host为内网ip。

(5)max virtual memory areas vm.max_map_count [65530] is too low

报这个错说明系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。

#修改文件
sudo vim /etc/sysctl.conf
 
#添加参数
...
vm.max_map_count = 262144

#重新加载配置
sysctl -p

(6)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: 启动时初始化的参与选主的node,生产环境必填

### (7)BindTransportException[Failed to bind to [9300-9400]]; nested: BindException

配置文件中的ip地址得是内网ip。


# 二、配置

Elasticsearch 有三个配置文件,存放在 config 目录下:

```java
elasticsearch.yml 用于配置 Elasticsearch
jvm.options 用于配置 Elasticsearch JVM 的设置
log4j2.properties 用户配置 Elasticsearch 日志
  • 参考:

JVM 参数设置
日志配置
重要Elasticsearch配置
重要的系统参数

二、Kibana

1.安装

  • 下载

首先进入https://www.elastic.co/cn/downloads/past-releases/kibana-7-3-2下载好与Elasticsearch相同版本的安装包。然后把下载好的安装包上传到服务器上去。

  • 解压
tar -xvf kibana-7.3.2-linux-x86_64.tar.gz # 解压,注意换成你的压缩包名
mv kibana-7.3.2-linux-x86_64 kibana7 # 重命名
cd kibana7 # 进入目录
  • 修改配置
vim config/kibana.yml # 修改配置文件,修改以下内容
server.port: 5601 # 端口
server.host: "172.16.16.4" # 内网ip
elasticsearch.hosts: ["http://172.16.16.4:9200"] # Elasticsearch的url
  • 修改权限,用非root用户操纵kibana
chown es:devGroup -R kibana7/

然后启动Elasticsearch服务和kibana。

  • 启动kibana
cd /usr/local/kibana7/bin # 进入目录
su es # 切换用户es
./kibana # 启动
  • 访问
浏览器中访问http://ip地址:5601/app/kibana

2.报错

(1)cluster. Error: No Living connections

出现这个问题说明是没连上Elasticsearch,看一下elasticsearch.yml配置是否有问题,尤其是一些涉及到ip的地方。所有涉及到ip的地方我都写的服务器内网ip,而不是外网ip、localhost、127.0.0.1这些。

(2)FATAL Port 5601 is already in use. Another instance of Kibana may be running!

端口占用问题。

# 找到进程IP
fuser -n tcp 5601
# 然后kill掉这个进程
kill -9 进程IP

三、核心概念

关系型数据库Elasticsearch
数据库索引
types(逐渐会被弃用)
documents
字段fields

1.逻辑设计

一切都是JSON。

  • 文档
    索引和搜索的最小单位,就是一条条数据
    文档可以嵌套

  • 类型
    每个字段的类型,可以不设置,让es去猜;也可以提前设置,就和关系型数据库差不多了。

  • 索引
    相当于数据库,是大量文档的集合。索引存储了映射类型的字段和其他设置,他们被存到了各个分片上。

2.物理设计

  • 节点和分片如何工作

在这里插入图片描述

- 一个集群至少有一个节点,一个节点就是一个Elasticsearch进程
- 一个节点默认有5个分片,每个分片也会有一个复制分片
- 分片和对应的复制分片不会在同一个节点中,保障分布式系统的高可用性
- 每个分片都包含了一个包含倒排索引的文件目录,倒排索引使得在不扫描全部文档的情况下,就能知道哪些文档包含特定的关键字。
  • 倒排索引

底层采用lucene倒排索引作为底层,这种结构适用于快速的全文搜索。对于每个倒排索引,都包含了一个不重复的列表,即,对于每个词,都有一个包含它的文档列表。

doc_1:She crunched her apple noisily.
doc_2:He took another bite of apple.
termdoc_1doc_2
She×
crunched×
her×
apple
noisily×
He×
took×
another×
bite×
of×
  • score计算

假如搜索her apple,doc_1的得分应该比doc_2更高。

termdoc_1doc_2
her×
apple
total21
  • Elasticsearch的索引和Lucene索引

一个es的索引包含多个分片,每个分片包含一个Lucene索引。

四、IK分词器

一个中文分词器,提供了两个算法ik_smart和ik_max_word。默认的中文分词器把一句话分成一个一个的字,肯定是不行的,因此要使用ik中文分词器。

ik_max_word: 会将文本做最细粒度的拆分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌",会穷尽各种可能的组合;

ik_smart: 会做最粗粒度的拆分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国,国歌"。

1.安装

- 下载和es相同版本的插件安装包:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.3.2
- 解压安装包到 ElasticSearch 所在文件夹中的plugins目录中
- 再启动ElasticSearch,查看IK分词器插件是否安装成功

在这里插入图片描述

2.功能测试

在kibana dev中测试以下两个rest请求,能得到不同的结果:

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "中国共产党"
}

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "中国共产党"
}

3.扩展字典

由于自带的词库不一定有某些词,因此可以对词库进行扩充。

比如,当我们作如下请求的时候:

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "爱国人士王二麻"
}

会得到以下分词结果:

{
  "tokens" : [
    {
      "token" : "爱国人士",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "王",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "CN_CHAR",
      "position" : 1
    },
    {
      "token" : "二",
      "start_offset" : 5,
      "end_offset" : 6,
      "type" : "TYPE_CNUM",
      "position" : 2
    },
    {
      "token" : "麻",
      "start_offset" : 6,
      "end_offset" : 7,
      "type" : "CN_CHAR",
      "position" : 3
    }
  ]
}

我们想将王二麻作为一个词分出来,然而词库中并没有这个词,所以,我们需要对词库进行扩充。

在ik分词器文件的config目录中新建自定义的字典文件,以.dic为后缀。
my.dic

王二麻

然后打开 IKAnalyzer.cfg.xml 文件,把自定义的字典添加到IK的字典中:

<?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">my.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典-->
        <entry key="ext_stopwords"></entry>
        <!--用户可以在这里配置远程扩展字典 -->
        <!-- <entry key="remote_ext_dict">words_location</entry> -->
        <!--用户可以在这里配置远程扩展停止词字典-->
        <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

重启es,词库中就有王二麻这个词了,可以测试一下。

五、Rest

使用postman操纵Elasticsearch:教程在此,对于几种分词器也有说明

数据类型:Elasticsearch 7.X 数据类型

其他

elasticdump插件导入导出数据

  • 先安装node.js

教程在此

  • 导入导出命令
1 在es目录下安装elasticdump插件
npm install elasticdump -g

2 启动es服务

3 导出数据为json格式
在自己电脑上,进入准备存放json文件的目录,执行以下命令
elasticdump --input http://ip地址:9200/zhsf_3_0 --output ./zhsf_3_0_mapping.json --type=mapping

elasticdump --input http://ip地址:9200/zhsf_3_0 --output ./zhsf_3_0.json --type=data
第一条复制结构,第二条复制数据

4 通过json文件导入数据
elasticdump --input ./zhsf_4_0_mapping.json --output http://localhost:9200/zhsf_4_0 --type=mapping

elasticdump --input ./zhsf_4_0.json --output "http://localhost:9200/zhsf_4_0"

参考

Elasticsearch中文文档
教程
博客1
博客2
博客3
博客4

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

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

相关文章

如何在高压系统中实现电源和信号线的电气隔离

介绍 在一系列高压应用中存在电源和信号线的情况下&#xff0c;需要为设备和用户提供强大的保护&#xff0c;包括工厂自动化和电机驱动器等工业 4.0 系统。这延伸到汽车和电动汽车 &#xff08;EV&#xff09;、医疗系统、测试和测量应用以及光伏系统和电网基础设施等绿色能源…

ChatGPT API调用python和脚本实现

Chat GPT 由于其独特、近乎准确且类似人类的响应&#xff0c;如今在互联网上引起了过多的讨论。本文讨论如何通过 Python 代码连接到 Chat GPT API。 如果需要用website访问chatGPT&#xff0c; 请参考保姆级教程 火爆全球的网红OpenAI ChatGPT注册教程 文章目录第 1 步&#x…

随笔记——线程池

文章目录1 概览2 核心点2.1 使用线程池的好处2.2 如何创建线程池2.3 线程池的参数2.4 如何处理任务流程&#xff1f;2.5 如何关闭线程池2.6 拒绝策略2.7 线程池满了&#xff0c;会怎样&#xff1f;1 概览 2 核心点 2.1 使用线程池的好处 降低资源消耗&#xff1a;通过重复利用…

Servlet程序创建步骤

1. 创建项目 使用 IDEA 创建一个 Maven 项目. 1) 菜单 -> 文件 -> 新建项目 -> Maven 2. 引入依赖 Maven 项目创建完毕后, 会自动生成一个 pom.xml 文件. 我们需要在 pom.xml 中引入 Servlet API 依赖的 jar 包. 1) 在 中央仓库 中搜索 "servlet", 一般…

android 系统安全内容总结

部分android系统安全内容网上已经存在,这里的android系统安全内容还是以经验总结为主,夹带不少引用,并形成个人的理解。 android安全内容学习需要一定基础,没接触安全的开发可以认识一下,接触过安全的可以对比安全上的理解。组建android系统安全讨论群进行维护更新android…

基于ssm高校科研成果管理系统 java ideamysql

&#xff08;1&#xff09;教师功能需求 教师进入系统可以查看个人中心、科研成果初审管理、科研成果终审管理、科研发布管理、留言板管理等操作。 &#xff08;2&#xff09;管理员功能需求 管理员登陆后&#xff0c;主要功能模块包括个人中心、教师管理、学院管理员管理、科…

linux Redis 搭建

命令下载&#xff1a;wget https://download.redis.io/releases/redis-6.2.6.tar.gz安装gcc&#xff1a;yum -y install gcc automake autoconf libtool make;进入src下make编译&#xff1a;make;make MALLOClibc&#xff08;报错时执行&#xff09;make install新建文件夹相关…

【Meta EnCodec源码分析】BitPacker功能介绍

二进制流 首先介绍一下二进制流。 假如有下4个数值 [ 47, 19, 38, 53 ]首先每个数字对应的二进制分别如下 十进制数值二进制数值470x0010 1111190x0001 0011380x0010 0110530x0011 0101 我们需要将这些数字保存到一个二进制文件中。 注&#xff1a;这里不考虑BigEndian还…

Centos使用lanproxy,搭建一个属于自己的内网穿透服务器(附转发失败解决方法),小白向

目录 前言 准备工作 搭建与使用 1. 安装git工具 2. 安装java环境 3. 安装maven工具 4. 搭建Lanproxy 5. 启动内网穿透服务 6. 设置开机自启 转发失败解决方法 前言 最近白嫖了7个月阿里云的服务器&#xff0c;顺带研究了一下&#xff0c;发现有挺多有趣又好玩的东西…

Acwing---1096. 地牢大师

地牢大师1.题目2.基本思想3.代码实现1.题目 你现在被困在一个三维地牢中&#xff0c;需要找到最快脱离的出路&#xff01; 地牢由若干个单位立方体组成&#xff0c;其中部分不含岩石障碍可以直接通过&#xff0c;部分包含岩石障碍无法通过。 向北&#xff0c;向南&#xff0…

Redis基于docker跨服务器的一主两从三哨兵集群模式搭建

文章目录1 整体拓扑图2 redis与哨兵配置文件2.1 主节点配置文件2.1.1 主节点redis.conf配置文件2.1.2 主节点哨兵配置文件2.2 从节点配置文件2.1.1 从节点redis.conf配置文件2.1.2 从节点哨兵配置文件3 docke-compose编排文件4 启动并测试查看哨兵日志查看集群状态测试集群是否…

Spring源码分析 (Spring启动过程之容器对象的创建) (十五)

点进去 1.this() 2.注册配置类 3.refresh() Spring会将所有交由Spring管理的类&#xff0c;扫描其class文件&#xff0c;将其解析成BeanDefinition&#xff0c;在BeanDefinition中会描述类的信息&#xff0c;例如:这个类是否是单例的&#xff0c;Bean的类型&#xff0c;是否是懒…

导向滤波算法——OpenGL实现

导向滤波 一、介绍 导向滤波又称引导滤波&#xff0c;通过一张引导图片反映边缘、物体等信息&#xff0c;对输入图像进行滤波处理&#xff0c;使输出图像的内容由输入图像决定&#xff0c;但纹理与引导图片相似。 导向滤波的原理是局部线性模型&#xff0c;在保持双边滤波的优…

【学习笔记】多线程

1、线程基础 1.1 创建线程的几种方式 继承Thread 类&#xff0c;覆盖run方法实现Runable接口。实现run方法。然后 通过Thread类构造方法获取Thread对象。实现Callable接口。实现call方法。 call方法可以抛出异常。也可以有返回值。 run与start 调用run方法任然是主线程在执行。…

这个 Python 游戏库,打开就能玩一天

会 Python 的小伙伴&#xff0c;选择用 Python 让“大风车”吱呦呦地转&#xff01;还有的小伙伴&#xff0c;选择用 Turtle 库绘制童年的卡通人物 我们其实还可以选择用 Python 开发小游戏&#xff0c;回忆童年的美好时光。 “凹凸版”吃豆子 这次并非用pygame制作的&#…

MyBatis超详细学习笔记(黑马)

目录 一、MyBatis快速入门 &#xff08;一&#xff09;打开MyBatis中文官网 &#xff08;二&#xff09;在工程中&#xff08;pom.xml&#xff09;导入MyBatis依赖 &#xff08;三&#xff09;编写MyBatis核心配置文件——替换连接信息&#xff0c;解决硬编码问题 &#x…

关于加强网络舆情监测的几点建议,TOOM强化舆情监控有方法

网络舆情监测是一项旨在通过监测网络上的舆情信息&#xff0c;了解社会舆论和网络话语状况&#xff0c;分析舆情动态&#xff0c;预测舆情走向&#xff0c;并进行舆情管控的工作。主要通过计算机技术和信息科学手段对网络信息进行收集、整理、分析和报告&#xff0c;以便于管理…

Golang - 操作Redis

Golang - 操作Redis go-redis是Golang语言连接、操作Redis服务的客户端&#xff0c;几乎包含了对Redis的所有操作&#xff0c;具体如下&#xff1a; 简单易用 兼容多种Redis部署架构,可用于Redis服务器、Redis群集、Redis Sentinel&#xff0c;甚至Redis服务器环go-redis 支持…

配置TF-A源码

配置TF-A源码 1.对tf-a源码进行解压 $> tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz 2.打补丁 进入/home/ubuntu/FSMP1A/tf-a-stm32mp-2.2.r2-r0/tf-a-stm32mp-2.2.r2目录 执行 for p in ls -1 ../*.patch; do patch -p1 < $p; done 3.配置工具链 1)进入/home/ubuntu/FS…

05 CSS-CSS语法【尚硅谷JavaWeb教程】

05 CSS-CSS语法【尚硅谷JavaWeb教程】 JAVAWEB的学习笔记 学习视频来自&#xff1a;https://www.bilibili.com/video/BV1AS4y177xJ/?vd_source75dce036dc8244310435eaf03de4e330 为什么需要CSS 传统的园区网络采用设备和链路冗余来保证高可靠性&#xff0c;但其链路利用率低、…