文章目录
简介
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库—无论是开源还是私有。
但是 Lucene 仅仅只是一个库。为了充分发挥其功能,你需要使用 Java 并将 Lucene 直接集成到应用程序中。 更糟糕的是,您可能需要获得信息检索学位才能了解其工作原理。Lucene 非常 复杂。
Elasticsearch 也是使用 Java 编写的,它的内部使用 Lucene 做索引与搜索,但是它的目的是使全文检索变得简单, 通过隐藏 Lucene 的复杂性,取而代之的提供一套简单一致的 RESTful API。
然而,Elasticsearch 不仅仅是 Lucene,并且也不仅仅只是一个全文搜索引擎。 它可以被下面这样准确的形容:
- 一个分布式的实时文档存储,每个字段 可以被索引与搜索
- 一个分布式实时分析搜索引擎
- 能胜任上百个服务节点的扩展,并支持 PB 级别的结构化或者非结构化数据
倒排索引
比如我们在搜索引擎上搜索某个事物,比如我们搜索 “嬴政”,则会出现跟秦始皇相关的很多信息,这些信息中比如有一条是这样描述:
秦始皇嬴政,中国第一个皇帝。
秦始皇,病死于沙丘。
结构化数据
以上的语句我们如果以结构化的表示,如下:
name:嬴政,job:皇帝,order:第一,alias:秦始皇 ... ...
以上的描述我们可以用数据库进行存储到某个表,比如 t_figure 人物表。可通过某个字段进行查询。结构化的数据存储之前需要进行结构的分析才能存储,但是一旦存储很容易搜索。
非结构化数据
但实际生活当中,我们得到的信息往往就是上面的一句话,而且每段话都不一样,无法按照固定的格式进行结构化的数据展示。也就是说进行结构化的转换很麻烦,所以大部分的信息可以直接将这段话进行存储。非结构化的数据存储方便,但是查找起来比较难。正常的查找方式都是整段话去匹配,搜索导致效率很低。
倒排索引的主要思想是将这段话进行分词,比如我们的这段话进行分词后为:秦始皇/嬴政/中国/第一个/皇帝/病死/沙丘。将这些信息做成倒排索引如下
词条 | 所在文档 |
---|---|
秦始皇 | 文档1、文档2 |
嬴政 | 文档1 |
中国 | 文档1 |
第一个 | 文档1 |
皇帝 | 文档1 |
病死 | 文档2 |
沙丘 | 文档2 |
文档1即为第一句话,文档2即为第二句话。
这样,当我们搜索秦始皇的时候,就返回文档1和文档2的内容。其他词条依此内推。
Elastic 中的索引和文档
以上面的示例为例,词条的每一行都是Elastic中的索引,每个索引可以对应多个文档。我们可以对比我们的结构化数据库的概念来协助理解Elasticsearch的索引和文档的概念。
数据库 | Elastic | 描述 |
---|---|---|
表 | 索引 index | 索引类似于表,每个索引就是一张表 |
行 | 文档 doc | 每个文档就像每行数据 |
列 | 文档中的字段 Field | 字段(Field),就是JSON文档中的字段,类似数据库中的列(Column) |
模式schema | 映射 Mapping | Mapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema) |
SQL | DSL | DSL是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD |
安装方式
- 源码包安装(可到官网下载地址下载linux、mac、windows对应的源码包)- 本文使用该方式安装到 linux
- apt 或 yum 在线安装
- rpm安装
- docker安装等
官网地址
官方文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/8.6/getting-started.html
最新版本下载地址:https://www.elastic.co/cn/downloads/elasticsearch
源码包下载
本文的下载版本为:elasticsearch-8.6.2-linux-x86_64.tar.gz (8.6.2)
安装
1. 解压 elasticsearch-8.6.2-linux-x86_64.tar.gz
解压后的目录如下:
- bin:es相关命令目录
- config:es相关配置目录,主要包括 elasticsearch.yml 等,TLS密钥证书等默认生成在此目录的 certs 目录下。certs 在首次启动es的时候才会生成
- data:节点上分配的每个索引/分片的数据文件的位置(启动之后才会生成,可通过 path.data 配置),默认在$ES_HOME/data目录,建议配置在$ES_HOME之外的目录,避免ES在升级的时候被覆盖
- logs:日志文件目录(可通过 path.logs 配置)默认在$ES_HOME/logs目录,建议配置在$ES_HOME之外的目录,避免ES在升级的时候被覆盖
- plugins:插件存放目录(比如我们后续要安装的ik中文分词器插件)
- jdk:自带的 jdk 目录,可进入目录后执行java -version 查看其版本
建议更改配置目录、数据目录和日志目录的默认位置 这些配置都在 elasticsearch.yml 中。
启动
./bin/elasticsearch
首次启动 Elasticsearch 时,默认情况下会启用和配置安全功能。以下配置会自动生成:
- 启用 elastic 用户的身份验证和授权,设置为内置超级用户生成并打印密码。
- 生成 TLS 的证书和密钥,并使用这些密钥和证书启用和配置 TLS。
- 为 Kibana 生成注册令牌,有效期为 30 分钟。
以上生成的内容大概如下:
The generated password for the elastic built-in superuser is:
<password>
The enrollment token for Kibana instances, valid for the next 30 minutes:
<enrollment-token>
The hex-encoded SHA-256 fingerprint of the generated HTTPS CA DER-encoded certificate:
<fingerprint>
You can complete the following actions at any time:
Reset the password of the elastic built-in superuser with
'bin/elasticsearch-reset-password -u elastic'.
Generate an enrollment token for Kibana instances with
'bin/elasticsearch-create-enrollment-token -s kibana'.
Generate an enrollment token for Elasticsearch nodes with
'bin/elasticsearch-create-enrollment-token -s node'.
示例图
注:elastic 的密码最好保存一下,我们接下来就会使用
验证启动是否成功
直接在本地通过curl命令访问
curl --cacert /DATA/soft/es/elasticsearch-8.6.2/config/certs/http_ca.crt -u elastic https://localhost:9200
执行后输入 elastic 账号的密码,返回如下内容
{
"name" : "cspl-dev",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "iozzv0S0Q6mKwgNnfAA8Xw",
"version" : {
"number" : "8.6.2",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "2d58d0f136141f03239816a4e360a8d17b6d8f29",
"build_date" : "2023-02-13T09:35:20.314882762Z",
"build_snapshot" : false,
"lucene_version" : "9.4.2",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
我们也可以通过浏览器输入账号密码后直接访问
至此,单机安装并启动es就完成了。不过此启动方式是前台运行方式,使用Ctrl + C 即可关闭。
后台运行
./bin/elasticsearch -d -p pid
- -d:表示后台执行
- -p:表示将进程 pid 记录在文件 pid 中(pid文件生成后默认在 $ES_HOME 目录下)
关闭后台运行
pkill -F pid
注:因 pid 文件生成在 $ES_HOME 目录下,所以请在 $ES_HOME 目录下执行该命令
安全证书和密钥编辑
安装 Elasticsearch 时,会在 Elasticsearch 配置目录中生成以下证书和密钥,用于将 Kibana 实例连接到安全的 Elasticsearch 集群并加密节点间通信。
- http_ca.crt
用于为此 Elasticsearch 集群的 HTTP 层签署证书的 CA 证书。客户端连接需要信任此证书。 - http.p12
包含此节点的 HTTP 层的密钥和证书的密钥库。 - transport.p12
包含集群中所有节点的传输层密钥和证书的密钥库。
http.p12并且transport.p12是受密码保护的 PKCS#12 密钥库。可以使用 bin/elasticsearch-keystore 命令,检索或更改密钥库内容
检索 http.p12
bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password
检索 transport.p12
bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password