Elasticsearch 指南 [7.0] - 快速开始

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Getting started Elasticsearch 是一个高度伸缩的开源全文搜索与分析引擎。它可以使你快速的近乎于准实时的存储、查询和分析超大数据集。它通常被用来当做构建复杂查询特性和需求强大应用的基础引擎/技术。

Getting started 快速开始

Elasticsearch 是一个高度伸缩的开源全文搜索与分析引擎。它可以使你快速的近乎于准实时的存储、查询和分析超大数据集。它通常被用来当做构建复杂查询特性和需求强大应用的基础引擎/技术。
Elasticsearch 可以被用在如下几个场景:
1. 当你运营一个提供客户检索商品的在线电子商城的时候,可以使用ES来存储整个商品目录和库存,并且为客户提供检索和自动推荐功能。
2. 收集交易数据,存储并做趋势、统计、概要或异常分析。这种情况下,可以使用Logstash来收集、聚合和解析数据,并且存储到 Elasticsearch。一单数据进入 Elasticsearch,你可以检索,聚合来掌握你感兴趣的信息。 
3. 价格预警平台,为价格敏感客户提供匹配其需求(主要是价格方面)的商品。 
4. 在报表分析/BI领域,可以使用ES的聚合功能完成针对大数据量的复杂分析。

Basic Concepts 基本概念

如有是Elasticsearch的几个核心概念。开篇理解这几个概念对后面的学习过程非常有帮助。

Near Realtime (NRT) 准实时

Elasticsearch 是一个准实时搜索平台。这句话的意思是,从创建索引到可以被查询之间的延时很短(正常情况下一秒的延时)。

Cluster 集群

一个 Elasticsearch 集群是一到多个ES 节点的集合,保存了所有数据和提供了跨集群内所有节点的联合索引和搜索能力。一个集群被命名为唯一的名字(默认为 elasticsearch)。集群名称非常重要,因为当一个节点通过集群的名字加入集群时,一个节点只能是一个集群的一部分。
确保在不同的环境使用不同的集群名称,否则会导致节点添加到错误的集群。比如你可以用logging-dev\logging-state\logging-prod来区分不同环境集群。
注意,只有一个节点的集群是有效且非常好的。此外,您还可以拥有多个独立的集群,每个集群都有自己独特的集群名称。

Node 节点

一个节点是作为集群一部分的单个服务器,存储数据并参与集群的索引和搜索。与集群一样,节点由一个名称标识,默认情况下,该名称是在启动时分配给节点的随机通用唯一标识符(UUID)。如果不希望使用默认值,则可以定义所需的任何节点名称。节点名称对于管理目的很重要,因为您希望确定网络中的哪些服务器对应于 Elasticsearch 集群中的哪些节点。
一个节点可以被设置添加到指定名称的集群。默认情况下,每个节点会被设置加入到名称为elasticsearch 的集群,意味着,如果在你的网络中启动一些节点(假设这些节点可以发现彼此),他们会自动形成并加入名称为elasticsearch的集群。
在一个急群众,你可以拥有你想要的节点数。此外,如果在你的网络中没有任何Elasticsearch 节点,启动一个node会组成一个名称为sleasticsearch的单节点集群。

Index 索引

一个索引是一个拥有一些相似特征的文档的集合。比如,你可以拥有一个客户数据的索引,一个商品目录索引,甚至一个订单数据索引。一个索引同城被一个名字(所有字母必须小写)标示并且当针对这个索引的文档执行索引、搜索、更新和删除操作的时候这个名字被用来指向索引。

Type 类型

一个type通常是一个索引的一个逻辑分类/分区,允许在 一个索引下存储不同类型的文档。比如用户类型,博客类型。现在已经不能在一个索引下创建多个类型,并且类型概念已经在后续版本删除。见[详细](https://www.elastic.co/guide/en/elasticsearch/reference/current/removal-of-types.html)

Document 文档

一个文档是可以被索引的基本信息单元。比如,你可以为一个客户创建一个文档,为一个商品创建一个文档。文档可以用json表示。在一个索引李,你可以存储足够你想想的文档数。

Shards & Replicas 分片 & 复本

一个节点可能存储大量数据导致突破单个节点的硬件极限。举个例子,占用1TB磁盘空间的数十亿个文档的单个索引可能不适合单个节点的磁盘,或者单个节点速度太慢,无法满足搜索请求。
为了解决这些问题,Elasticsearch 提供了将索引拆分成多个片的称作分片的能力。当创建一个索引,可以简单的设置你想要的分骗术。每个分片内部是一个全功能且独立的“index”可以被存储在集群的任何节点。
从两个方面来说下分片的重要性:
1. 它允许你水平拆分/扩展你的数据集
2. 它允许你跨分片分布式并行操作来提升性能和吞吐。
分片结构如何分布以及检索请求结果文档如何聚合由 Elasticsearch 管理,这些对用户来说是透明的。

在随时可能发生故障的网络/云环境中,强烈建议提供故障转移机制以防分片/节点以某种方式脱机或因任何原因消失。为此,ElasticSearch允许您将索引分片的一个或多个副本复制成所谓的副本分片,简称为副本。 

从两个方面说下副本的重要性:
1. 它提供了高可用机制以防分片/节点失败。明确指出,一个副本不能与要拷贝的原始/主 分片分配在同一个节点。
2. 它允许你水平扩容你的查询数据集/吞吐,因为检索可以在所有副本并行执行。
简而言之,每一个索引可以被拆分为多个分片。一个索引页可以有0或多个副本。索引一单被复制,每一个索引会有主分片和复制分片。
创建索引的时候可以为每个索引指定分片数和复本数。索引创建完成后,还可以动态修改副本数。你可以通过_shrink 和 _split APIs 来改变已经存在索引的分片数。然而,这不是一个简单的任务,预先计划正确的分片数是最佳方法。 
默认情况下,在 Elasticsearch的每个索引分配了一个主分片和一个副本,意味着如果你的鸡群里至少有两个节点,你的索引会拥有一个主分片和另一个复制分片,每个索引总共两个分片。
注:每一个 Elasticsearch 分片是一个Lucene索引。每一个 Lucene索引都有文档存储上限。 As of LUCENE-5843, the limit is 2,147,483,519 (= Integer.MAX_VALUE - 128) documents。可以通过 _cat/shards API监控分片数。

Installation 安装

[见](https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started-install.html)

Exploring Your Cluster 探索集群

The REST API
现在我们已经启动并运行起来了节点(和集群),下一步是理解怎么与其进行通信。幸运的是,Elasticsearch 提供了非常全面和强大的 REST API,我们可以借助这些API与集群交互。通过使用API我们可以完成下面这些事情:
1. 检查集群、节点和索引的健康、状态及分析。
2. 管理集群、节点、索引数据和元数据。
3. 执行CRUD操作和依靠索引进行检索操作。
4. 执行高级检索操作比如分页,排序,过滤,脚本,聚合以及其他更多操作。 

Cluster Health 集群健康

执行GET http://localhost:9200,结果日下:
{
  "name" : "KmARDca",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "AaFAZp9sTr2Lb7Em5k_fCw",
  "version" : {
      "number" : "6.2.4",
      "build_hash" : "ccec39f",
      "build_date" : "2018-04-12T20:37:28.497551Z",
      "build_snapshot" : false,
      "lucene_version" : "7.2.1",
      "minimum_wire_compatibility_version" : "5.6.0",
      "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}
检查集群健康情况,可以使用 _cat API。
    GET /_cat/health?v
执行http://localhost:9200/_cat/health?v,结果如下:
    epoch      timestamp       cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
    1557402508 19:48:28  elasticsearch yellow          1           1               5    5    0    0        5             0                  -                 50.0%
    
     如上所示:名称为elasticsearch的集群目前状态为yellow。原因是目前只有一个node,无法分配副本空间。
     集群分为三种状态,分别为:绿,黄和红。
    1. 绿-代表一切正常(集群可用)
    2. 黄-代表所有数据可用,但是一些复本没有被分配(集群可用)
    3. 红-代表部分数据可用(集群部分可用)
获取集群节点列表:
    GET /_cat/nodes?v
    执行http://localhost:9200/_cat/nodes?v,结果如下:
    ip        heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
    127.0.0.1           16         100   6    2.61                  mdi       *      KmARDca

List All Indices 获取所有索引

    GET /_cat/indices?v
    执行http://localhost:9200/_cat/indices?v,结果如下:
    health status index uuid                                      pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   kol    XFtwMTcfRROJ4q7_4mX7gg   5   1          1            0                4.8kb          4.8kb    

Create an Index 创建索引

    PUT /customer?pretty
    GET /_cat/indices?v

Index and Query a Dcument 索引和查询一个文档

    PUT /customer/_doc/1?pretty
{
    "name" : "John Doe"
}
    返回结果如下:
{
    "_index" : "customer",
    "_type" : "_doc",
    "_id" : "1",
    "_version" : 1,
    "result" : "created",
    "_shards" : {
      "total" : 2,
      "successful" : 1,
      "failed" : 0
    },
    "_seq_no" : 0,
    "_primary_term" : 1
  }
    注意:Elasticsearch 不需要用户在创建索引文当前显示的去创建一个索引,如果索引不存在它可以自动创建。
    
    查询刚刚索引的文档:
    GET /customer/_doc/1?pretty
    返回结果如下:
  {
    "_index" : "customer",
    "_type" : "_doc",
    "_id" : "1",
    "_version" : 1,
    "_seq_no" : 25,
    "_primary_term" : 1,
    "found" : true,
    "_source" : { "name": "John Doe" }
  }

Delete an Index 删除索引

DELETE /customer?pretty
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
机器学习/深度学习 数据可视化 PyTorch
PyTorch小技巧:使用Hook可视化网络层激活(各层输出)
这篇文章将演示如何可视化PyTorch激活层。可视化激活,即模型内各层的输出,对于理解深度神经网络如何处理视觉信息至关重要,这有助于诊断模型行为并激发改进。
453 1
|
运维 监控 Cloud Native
设计与构建 FinOps 流程、团队、体系与目标
企业 FinOps 实施不是一蹴而就的项目,如果您正在推进企业云原生 FinOps 落地,除了选择合适的技术手段,企业内部的流程和体系建设也尤为重要。
164439 96
|
应用服务中间件
dist文件夹、src文件夹、dest文件夹作用
dist文件夹、src文件夹、dest文件夹作用
722 0
|
应用服务中间件 Linux 网络安全
CentOS 7 上安装 Nginx
在 CentOS 7 上安装 Nginx 的步骤包括:添加 EPEL 仓库,安装 Nginx,启动 Nginx,配置防火墙规则,最后通过访问服务器 IP 验证安装是否成功
589 0
|
消息中间件 Java Apache
消息队列 MQ使用问题之如何在内外网环境下使用单组节点单副本模式
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
判断闰年的两种常见方法
判断闰年的两种常见方法
525 1
|
存储 安全 算法
三种常见的加密算法:MD5、对称加密与非对称加密的比较与应用
网络安全聚焦加密算法:MD5用于数据完整性校验,易受碰撞攻击;对称加密如AES快速高效,密钥管理关键;非对称加密如RSA提供身份验证,速度慢但安全。三种算法各有所长,适用场景各异,安全与效率需权衡。【6月更文挑战第17天】
2300 2
|
存储 人工智能 自然语言处理
【AI大模型应用开发】【RAG评估】2. 实战:LangChain x RAGAs x LangSmith联合评估RAG应用,兼看如何借助LangSmith有效学习LangChain
【AI大模型应用开发】【RAG评估】2. 实战:LangChain x RAGAs x LangSmith联合评估RAG应用,兼看如何借助LangSmith有效学习LangChain
1674 0
|
JavaScript 算法
使用 THREE.js 进行边界体积碰撞检测
本文介绍如何使用 Three.js 库在边界框和球体之间实现冲突检测。假设在阅读本文之前,您已经先阅读了我们的 3D 碰撞检测介绍性文章,并了解了 Three.js 的基本知识。
488 0
|
SQL 前端开发 Java
大数据量下 MyBatis PageHelper 分页查询性能问题的解决办法
项目一直使用的是PageHelper实现分页功能,项目前期数据量较少一直没有什么问题。随着业务扩增,数据库扩增PageHelper出现了明显的性能问题。

热门文章

最新文章