Elasticsearch的安装与基本概念

76 阅读8分钟

Elasticsearch的基本概念

Elasticsearch是一个分布式的搜索引擎和分析引擎,基于Apache Lucene搜索引擎库构建而成,其核心概念包括:

  1. Cluster:一个集群由一个或多个节点组成,它们共同承载数据,并协同工作来提供分布式搜索和分析服务。
  2. Node:一个节点是集群中的一个服务器实例,它存储数据并参与集群的索引和查询操作。一个节点可以属于一个或多个集群。
  3. Index:索引是Elasticsearch中存储数据的地方,类似于关系型数据库中的表。每个索引包含了一个或多个文档类型,每个文档类型有多个文档组成。
  4. Document:文档是存储在索引中的最小数据单位。一个文档是一个JSON对象,可以包含不同的字段,每个字段代表一个属性。
  5. Shard:分片是索引的一个子集,一个索引可以分为多个分片,每个分片可以存储部分文档数据,分布在不同的节点上。
  6. Replica:副本是分片的复制,每个分片可以有零个或多个副本,用于提高数据可用性和容错性。
  7. Mapping:一个索引有一个mapping定义,它是文档类型和字段的定义。mapping可以指定每个字段的数据类型、分析器、存储方式等属性。

什么是全文检索

全文检索是指在文本、文件等文档中进行搜索的一种技术。它不仅仅是简单的关键词搜索,而是通过建立索引,对文档内容进行分词、提取关键词、词频统计等处理,从而快速、准确地找到符合用户需求的文档。全文检索常被应用于搜索引擎、知识管理、电商网站等领域。它的实现方式包括基于文本的搜索、基于词汇的搜索、基于语义的搜索等。

分词原理之倒排索引

倒排索引(Inverted Index)是搜索引擎中最基本的数据结构之一,是一种索引方法,它将单词与文档的关系从单个文档向单个单词进行索引。也就是说,它记录每个单词在哪些文档中出现,而不是记录每个文档中有哪些单词。通过倒排索引,可以快速地检索出包含某个单词的文档。

倒排索引包括两个部分:词表和倒排列表。词表中记录了所有出现过的单词,而倒排列表则记录了每个单词在哪些文档中出现。

例如,对于下面这段文本:

The quick brown fox jumps over the lazy dog.

将其进行分词后,可以得到如下的词语序列:

the, quick, brown, fox, jumps, over, the, lazy, dog

将这些单词插入到词表中,并记录下它们出现的位置,可以得到如下的词表:

the -> 1, 7
quick -> 2
brown -> 3
fox -> 4
jumps -> 5
over -> 6
lazy -> 8
dog -> 9

词表中的数字表示单词在原文本中出现的位置。接下来,对于每个单词,都创建一个倒排列表。例如,对于单词 "the",其倒排列表中包含了它出现的所有文档编号,也就是:

the -> [1, 7]

这样,在搜索时,只需要查询包含搜索关键字的倒排列表,并返回其对应的文档编号,就可以快速地找到相关文档了。

倒排索引是搜索引擎中非常重要的数据结构之一,可以极大地提高搜索效率。在Elasticsearch中,倒排索引是非常核心的组成部分,是搜索和聚合操作的基础。

image.png

与关系型数据库的对比

image.png

安装Elasticsearch

创建普通用户

因为root用户不能启动

在启动 Elasticsearch 时,最好不要使用 root 用户,而是使用非特权用户,因为使用 root 用户可以给恶意用户提供访问系统文件和进程的特权。另外,如果使用 root 用户启动 Elasticsearch 进程,会导致 Elasticsearch 进程启动的文件属主是 root,而后续的管理操作,比如升级和备份,将会因为权限问题而变得非常困难。因此,最好使用一个非特权用户启动 Elasticsearch。

useradd wxw
passwd wxw

设置sudo权限

visudo

在root下面加上

wxw     ALL=(ALL)       ALL

image.png

创建es文件夹

sudo mkdir -p /usr/local/es

在 Linux 系统中,/usr/local 目录通常用于安装本地软件和应用程序,而不是使用操作系统自带的软件包管理器进行安装。它通常包含以下目录和文件:

  • /usr/local/bin:包含本地软件和应用程序的可执行文件
  • /usr/local/include:包含本地头文件的目录
  • /usr/local/lib:包含本地共享库的目录
  • /usr/local/sbin:包含本地系统管理员可执行程序的目录
  • /usr/local/share:包含本地共享文件的目录
  • /usr/local/src:包含本地软件和应用程序源代码的目录

在大多数情况下,您应该在安装本地软件和应用程序时将它们放在 /usr/local 目录下,以避免干扰操作系统自带的软件包管理器。

用户es 添加到 wxw 用户组

sudo chown -R wxw:wxw es/

下载ElasticSearch

官方网址

image.png 选择你需要的版本下载

本教程使用7.6.1

点击链接下载 artifacts.elastic.co/downloads/e…

解压使用

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

修改配置文件

/usr/local/es/elasticsearch-7.6.1/config/elasticsearch.yml

elasticsearch.yml是elastsearch的配置文件

先创建两个文件夹

[wxw@elk02 elasticsearch-7.6.1]$ mkdir log
[wxw@elk02 elasticsearch-7.6.1]$ mkdir data

然后去修改配置文件

cluster.name: my-application
node.name: node-2
path.data: /usr/local/es/elasticsearch-7.6.1/data
path.logs: /usr/local/es/elasticsearch-7.6.1/log
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["192.168.2.19"]
cluster.initial_master_nodes: ["node-2"]
bootstrap.system_call_filter: false
bootstrap.memory_lock: false
http.cors.enabled: true
http.cors.allow-origin: "*"
  • cluster.name:设置集群名称,这里设置为 my-application
  • node.name:设置节点名称,这里设置为 node-2
  • path.data:设置数据目录的路径。
  • path.logs:设置日志目录的路径。
  • network.host:设置节点绑定的IP地址,这里设置为 0.0.0.0,表示绑定到所有可用的IP地址。
  • http.port:设置HTTP端口号,默认为9200。
  • discovery.seed_hosts:设置用于发现集群中其他节点的主机列表,这里只设置一个节点IP地址。
  • cluster.initial_master_nodes:设置初始的主节点列表,这里只设置一个节点名称。
  • bootstrap.system_call_filter:设置系统调用过滤器,用于在节点启动时限制节点能够执行的系统调用。
  • bootstrap.memory_lock:设置是否锁定内存,用于提高性能。
  • http.cors.enabled:设置是否启用跨域资源共享(CORS)。
  • http.cors.allow-origin:设置允许跨域请求的源。这里设置为 *,表示允许来自任何源的请求。

修改jvm.option

-Xms2g
-Xmx2g

-Xms-Xmx 是 Java 虚拟机 (JVM) 的启动参数,用来设置 JVM 的堆内存大小。其中 -Xms 是指定 JVM 初始堆大小,-Xmx 是指定 JVM 最大可用堆大小。

修改系统配置

普通用户打开文件的最大数限制

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

sudo vi /etc/security/limits.conf

添加以下配置

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048 
* hard nproc 4096
  • nofile: 限制一个进程可以同时打开的文件数量,包括文件描述符和网络连接等。软限制是指可以修改的限制值,而硬限制是指不能超过的限制值。
  • nproc: 限制一个用户可以拥有的进程数目。同样,软限制和硬限制都可以设置。

普通用户调大虚拟内存

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

sudo vi /etc/sysctl.conf

追加

vm.max_map_count=262144

执行:

sysctl -p

建议完成上面步骤后重启一下

启动es

进入/usr/local/es/elasticsearch-7.6.1/bin

./elasticsearch -d

image.png

Kibana安装

ES主流客户端Kibana,开放9200端口与图形界面客户端交互

1)下载Kibana放之/usr/local/es目录中

2)解压:tar -zxvf kibana-X.X.X-linux-x86_64.tar.gz

3)进入/usr/local/es/kibana-X.X.X-linux-x86_64/config目录

修改配置文件

server.port: 5601
server.host: "192.168.2.19"
elasticsearch.hosts: ["http://192.168.2.19:9200"]

后台启动

nohup ./kibana &

这将启动Kibana进程,并将其放入后台运行,nohup命令可使进程忽略所有挂起的挂断(Hangup)信号,即使终端关闭也不会影响进程的运行。& 符号可以将进程放入后台运行。在运行命令后,可以关闭终端窗口,Kibana进程仍会继续在后台运行

image.png

安装ik分词器

使用Elasticsearch来进行中文分词,所以需要单独给Elasticsearch安装IK分词器插件 下载Elasticsearch IK分词器

github.com/medcl/elast…

Elasticsearch官方提供的插件包格式为zip文件,而不是tar.gz文件。这是因为Elasticsearch插件是Java插件,zip格式对于Java环境更为友好,可以更方便地进行安装和管理。虽然tar.gz格式在Unix/Linux环境下更为常见,但在Java环境下使用zip格式也是非常常见的。因此,你可以放心使用elasticsearch-analysis-ik-7.6.1.zip来安装IK分词插件。

mkdir -p /usr/local/es/elasticsearch-7.6.1/plugins/ik
cd /usr/local/es/elasticsearch-7.6.1/plugins/ik 
unzip elasticsearch-analysis-ik-7.6.1.zip

image.png

#ik_smart:会做最粗粒度的拆分 #ik_max_word:会将文本做最细粒度的拆分