Elasticsearch (ES) 搜索引擎: 简介、简单安装 与 基础概念

原文链接:https://xiets.blog.csdn.net/article/details/132348370

版权声明:原创文章禁止转载

专栏目录:Elasticsearch 专栏(总目录)

1. Elasticsearch 简介

Elasticsearch(简称为 ES)是一个分布式、高扩展、高实时的搜索与数据分析引擎。ES 是建立在 Lucene 基础之上的分布式搜索引擎,并且提供了比 Lucene 更简单、更灵活的使用方式。Lucene 是 Apache 的项目,但它不是一个完整的全文检索引擎,只提供了全文检索引擎所需要的架构。Lucene 使用 Java 语言开发,并且提供了 Java API 接口。ES 基于 Lucene,也是使用 Java 语言开发,但提供了 REST 风格的 HTTP API 接口,用户只需要使用 HTTP 请求的方式就可以完全使用 ES 的所有功能。

2. Elasticsearch 简单安装

ES 相关链接:

ES 支持 Docker 直接安装,参考:Install Elasticsearch with Docker,Docker 镜像:

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.9.0

ES 支持多机集群,对于基础入门而言,只需要使用本地单机简单安装即可。打开 ES 下载链接,下载对应平台的 ES 安装包。

ES 安装包是一个压缩文件,解压后得到下面目录(Windows):

elasticsearch
│── bin             # 存放 ES 启动、配置等脚本命令
│── config          # 存放 ES 配置文件
│── jdk             # ES 内置的 JDK
│── lib             # ES 运行所需要的一些 jar 包
│── logs            # 存放 ES 运行时产生的日志
│── modules         # 存放 ES 已安装的模块
│── plugins         # 存放 ES 已安装的插件
│── LICENSE.txt
│── NOTICE.txt
└── README.asciidoc

ES 安装包自带 JDK,只需要运行 bin 目录下的启动命令即可启动 ES 搜索引擎服务。

bin 目录下有许多命令,运行 bin 目录下的 elasticsearch 命令启动 ES 搜索引擎服务:

elasticsearch$ ./bin/elasticsearch

首次启动 ES 时,在安装目录下会增加一个 data 文件夹,用于存储索引数据文件。默认情况下会启用并配置安全功能。以下安全配置会自动发生:

  • 启用身份验证和授权,并为内置的超级用户 elastic 生成密码。
  • 为传输层和 HTTP 层生成 TLS 的证书和密钥,并使用这些密钥和证书启用和配置 TLS。
  • 为 Kibana 生成注册令牌,有效期为 30 分钟。

elastic 用户的密码 和 Kibana 的注册令牌将输出到终端,例如:

elasticsearch_start.webp

启动和停止ES,参考:Starting ElasticsearchStopping Elasticsearch

运行 ./bin/elasticsearch 命令默认是前台启动,如果要后台运行,可以加上 -d 参数,即:./bin/elasticsearch -d

要重置密码,可以运行 ./bin/elasticsearch-reset-password -u elastic 命令。

首次启动 ES 后,生成的 TLS 证书和密钥保存在 config/certs 目录下:

config/certs
│── http_ca.crt
│── http.p12
└── transport.p12

并且在 config/elasticsearch.yml 配置文件末尾增加相关安全配置:

#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically      
# generated to configure Elasticsearch security features on 21-07-2023 04:26:56
#
# --------------------------------------------------------------------------------

# Enable security features
xpack.security.enabled: true

xpack.security.enrollment.enabled: true

# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: true
  keystore.path: certs/http.p12

# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial_master_nodes: ["xiets.local"]

# Allow HTTP API connections from anywhere
# Connections are encrypted and require user authentication
http.host: 0.0.0.0

# Allow other nodes to join the cluster from anywhere
# Connections are encrypted and mutually authenticated
#transport.host: 0.0.0.0

#----------------------- END SECURITY AUTO CONFIGURATION -------------------------

3. 访问 Elasticsearch 服务器

ES 提供了 REST 风格的 HTTP API 接口访问,ES 服务器成功启动后,默认监听 9200 端口提供 HTTP 服务。

ES 的 REST APIs 参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html

使用浏览器访问 ES 服务器:

ES 默认开启了身份验证和 TLS,所以需要使用 https 访问,浏览器打开 https://localhost:9200,会提示不信任的证书(证书是ES自己生产的,所有浏览器不信任,可以把生成的证书安装到本地),点击“继续”或“信任证书”,然后弹出 Basic Authentication 认证的用户名和密码输入框,输入用户名 elastic,以及 ES 首次启动时终端输出的密码即可访问。

使用 CURL 命令访问 ES 服务器:

# -k 表示不校验 TLS 证书
curl -k "https://elastic:password@localhost:9200"

# 如果要校验 TLS 证书, 可以手动指定信任的证书
curl --cacert config/certs/http_ca.crt "https://elastic:password@localhost:9200" 

访问成功返回下面信息:

{
    
    
    "name" : "xiets.local",
    "cluster_name" : "elasticsearch",
    "cluster_uuid" : "upsm2zBASHSQF9eB-Zifwg",
    "version" : {
    
    
        "number" : "8.8.2",
        "build_flavor" : "default",
        "build_type" : "tar",
        "build_hash" : "98e1271edf932a480e4262a471281f1ee295ce6b",
        "build_date" : "2023-06-26T05:16:16.196344851Z",
        "build_snapshot" : false,
        "lucene_version" : "9.6.0",
        "minimum_wire_compatibility_version" : "7.17.0",
        "minimum_index_compatibility_version" : "7.0.0"
    },
    "tagline" : "You Know, for Search"
}

对于基础入门学习而言,开启身份认证和TLS非常麻烦,可以先关闭身份证认证和禁用TLS。修改 config/elasticsearch.yml 配置文件中的相关字段,如下所示,把相关字段值改为 false:

# Enable security features
xpack.security.enabled: false

# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:
  enabled: false

# 没有任何认证, 为了安全考虑, 确保只能本地访问, 
# 可以把 HTTP 监听地址改为 127.0.0.1, 默认为 0.0.0.0 表示所有 IP 都可以访问
http.host: 127.0.0.1

保存修改后的配置,重启 ES 服务器,然后就可以直接通过 HTTP 的方式免认证访问了:

curl http://localhost:9200/

Kibana 客户端自带了一个 Console - Dev Tools 工具,可以使用 DSL 语言很方便地访问 ES,还有 API 命令提示,安装 Kibana 参考:Install Kibana。Kibana 需要依赖 Elasticsearch 才能运行,下载解压 Kibana 后,需要在 kibana>/config/kibana.yml 配置文件中的 elasticsearch.hosts 字段值中修改 Elasticsearch 的访问地址。

4. Elasticsearch 基础概念

ES搜索引擎和传统的关系型数据库一样,都是用来存储和检索数据。在使用ES搜索引擎时,需要先知道一些基本的概念,并且这些概念名称在关系型数据库中都有相对于的概念。

索引

关系型数据库中,数据的增删改查,都是基于表的操作。ES搜索引擎中的索引就相当于关系型数据库中的。在ES中存储数据,首先需要创建索引,然后在索引中增加、搜索、更新数据。

文档

关系型数据库中,在表中存储数据,需要把数据封装为一条(一行)记录,而在ES中对应的就是文档。ES中的文档可以包含一个或多个字段值,每个字段可以有不同的数据类型。文档保存在索引中,一个ES文档相当于关系型数据库表中的一行数据记录。用户对数据操作的最细粒度对象就是文档。

字段

一个文档由一个或多个字段值组成,ES中的字段也相当于关系型数据库中的字段

映射

映射相当于关系型数据库中的表结构。和关系型数据库创建表一样,ES创建索引时需要定义文档的数据结构,这种结构称为映射。在映射中文档的字段类型在定义后就不能更改。

猜你喜欢

转载自blog.csdn.net/xietansheng/article/details/132348370