Elasticsearch 从零到一详细介绍

在这里插入图片描述

一、Elasticsearch 简介

Elasticsearch 是一个开源的分布式搜索和分析引擎,它基于 Apache Lucene 构建,提供了一个分布式、多租户的全文搜索引擎,具有高可扩展性、高可用性等特点,广泛应用于日志分析、全文检索、大数据分析等领域。

二、基础环境搭建

2.1 安装 Java

Elasticsearch 是用 Java 编写的,所以需要先安装 Java 环境。以 Linux 系统为例,使用以下命令安装 OpenJDK 11:

sudo apt-get update
sudo apt-get install openjdk-11-jdk

安装完成后,使用 java -version 命令验证安装是否成功。

2.2 下载并安装 Elasticsearch

从 Elasticsearch 官方网站(https://www.elastic.co/downloads/elasticsearch)下载适合你系统的安装包,解压后进入 Elasticsearch 目录。例如,在 Linux 系统上:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.6-linux-x86_64.tar.gz
tar -xzf elasticsearch-7.17.6-linux-x86_64.tar.gz
cd elasticsearch-7.17.6

2.3 启动 Elasticsearch

在 Elasticsearch 目录下,使用以下命令启动 Elasticsearch:

./bin/elasticsearch

如果要在后台运行,可以使用:

./bin/elasticsearch -d

2.4 验证安装

打开浏览器,访问 http://localhost:9200,如果看到类似以下的 JSON 响应,说明 Elasticsearch 安装并启动成功:

{
  "name" : "node-1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "abcdef123456",
  "version" : {
    "number" : "7.17.6",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "1234567890abcdef",
    "build_date" : "2023-05-12T02:26:06.621376232Z",
    "build_snapshot" : false,
    "lucene_version" : "8.11.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

三、基本概念

3.1 索引(Index)

索引是 Elasticsearch 中存储数据的逻辑容器,类似于关系型数据库中的数据库。一个 Elasticsearch 集群可以包含多个索引。例如,我们可以创建一个名为 products 的索引来存储商品信息。

3.2 类型(Type)

在 Elasticsearch 7.x 及以后的版本中,类型的概念已被废弃,一个索引中不再区分多种类型。但在早期版本中,类型类似于关系型数据库中的表。

3.3 文档(Document)

文档是 Elasticsearch 中存储的基本数据单元,类似于关系型数据库中的一行记录。文档以 JSON 格式表示。例如:

{
  "id": 1,
  "name": "iPhone 14",
  "price": 999,
  "description": "A great smartphone"
}

3.4 分片(Shard)

索引可以被分成多个分片,每个分片是一个独立的 Lucene 索引。分片可以分布在不同的节点上,从而实现数据的分布式存储和并行处理。例如,一个索引可以被分成 5 个主分片。

3.5 副本(Replica)

为了提高数据的可用性和容错性,每个主分片可以有多个副本分片。副本分片是主分片的复制,分布在不同的节点上。例如,每个主分片可以有 1 个副本分片。

四、基本操作

4.1 创建索引

使用以下命令创建一个名为 products 的索引:

curl -X PUT "localhost:9200/products?pretty"

pretty 参数用于格式化输出。

4.2 插入文档

使用以下命令向 products 索引中插入一个文档:

curl -X POST "localhost:9200/products/_doc?pretty" -H 'Content-Type: application/json' -d'
{
  "id": 1,
  "name": "iPhone 14",
  "price": 999,
  "description": "A great smartphone"
}
'

4.3 查询文档

使用以下命令查询 products 索引中的所有文档:

curl -X GET "localhost:9200/products/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "query": {
    "match_all": {}
  }
}
'

match_all 查询用于匹配索引中的所有文档。

4.4 更新文档

使用以下命令更新 products 索引中 id 为 1 的文档的 price 字段:

curl -X POST "localhost:9200/products/_update/1?pretty" -H 'Content-Type: application/json' -d'
{
  "doc": {
    "price": 1099
  }
}
'

4.5 删除文档

使用以下命令删除 products 索引中 id 为 1 的文档:

curl -X DELETE "localhost:9200/products/_doc/1?pretty"

五、面试题及答案

5.1 基础概念类

  • 问题:什么是 Elasticsearch?
    • 答案: Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建,提供了分布式、多租户的全文搜索功能,具有高可扩展性、高可用性等特点,广泛应用于日志分析、全文检索、大数据分析等领域。
  • 问题:请解释 Elasticsearch 中的索引、文档和分片的概念。
    • 答案:
      • 索引:是 Elasticsearch 中存储数据的逻辑容器,类似于关系型数据库中的数据库。
      • 文档:是 Elasticsearch 中存储的基本数据单元,以 JSON 格式表示,类似于关系型数据库中的一行记录。
      • 分片:索引可以被分成多个分片,每个分片是一个独立的 Lucene 索引,分片可以分布在不同的节点上,实现数据的分布式存储和并行处理。

5.2 操作类

  • 问题:如何在 Elasticsearch 中创建一个索引?
    • 答案: 可以使用 PUT 请求来创建索引。例如,使用 curl 命令:curl -X PUT "localhost:9200/my_index?pretty" 可以创建一个名为 my_index 的索引。
  • 问题:如何向 Elasticsearch 中插入一个文档?
    • 答案: 可以使用 POST 请求向指定索引插入文档。例如:
curl -X POST "localhost:9200/my_index/_doc?pretty" -H 'Content-Type: application/json' -d'
{
  "field1": "value1",
  "field2": "value2"
}
'

5.3 原理类

  • 问题:Elasticsearch 是如何实现分布式存储的?
    • 答案: Elasticsearch 通过分片机制实现分布式存储。一个索引可以被分成多个主分片,每个主分片可以有多个副本分片。主分片和副本分片可以分布在不同的节点上,当有新的数据写入时,数据会被分散存储在各个主分片上,副本分片会同步主分片的数据,从而实现数据的分布式存储和高可用性。
  • 问题:Elasticsearch 中的查询是如何执行的?
    • 答案: 当执行一个查询时,Elasticsearch 会将查询请求发送到所有相关的分片上,每个分片会在本地执行查询并返回结果。然后,这些结果会被汇总到一个节点上进行合并和排序,最终返回给客户端。

5.4 性能和优化类

  • 问题:如何优化 Elasticsearch 的性能?
    • 答案: 可以从以下几个方面进行优化:
      • 合理设置分片和副本数量,避免分片过多或过少。
      • 优化查询语句,避免使用复杂的查询和全量扫描。
      • 定期清理无用的数据,控制索引的大小。
      • 优化硬件资源,如增加内存、使用 SSD 等。
  • 问题:Elasticsearch 中出现慢查询如何处理?
    • 答案: 可以采取以下措施:
      • 使用 Elasticsearch 的慢查询日志功能,找出慢查询的具体语句。
      • 分析慢查询的原因,如是否使用了复杂的查询、是否进行了全量扫描等。
      • 对查询语句进行优化,如使用更合适的查询类型、添加过滤条件等。
      • 检查索引的设置和数据分布情况,是否需要调整分片和副本数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值