Elasticsearch

时间:2024-03-30 19:37:32

学习路径

入门阶段:

  1. 理解 Elasticsearch 的基本概念

    • 学习 Elasticsearch 的基本概念,包括文档、索引、分片、节点、集群等。
    • 熟悉 Elasticsearch 的基本架构和工作原理。
  2. 安装和配置 Elasticsearch

    • 在本地或者虚拟环境中安装 Elasticsearch,并进行基本的配置。
    • 了解如何启动和停止 Elasticsearch 服务。
  3. 使用 Elasticsearch 的基本功能

    • 学习如何索引文档、执行基本的搜索和查询操作。
    • 尝试使用 REST API 或 Elasticsearch 的客户端库与 Elasticsearch 进行交互。
  4. 学习查询语法和 DSL

    • 熟悉 Elasticsearch 的查询语法和 DSL,包括全文搜索、字段匹配、范围查询等操作。

进阶阶段:

  1. 数据建模和索引设计

    • 学习如何设计合适的索引结构,包括映射设置、字段类型选择等。
    • 理解索引设计对查询性能和存储效率的影响。
  2. 性能调优和优化

    • 学习如何优化 Elasticsearch 集群的性能,包括硬件选择、分片设置、缓存调优等方面。
    • 掌握监控工具和技术,及时发现和解决性能问题。
  3. 高级查询和聚合操作

    • 深入学习 Elasticsearch 的高级查询功能,包括布尔查询、模糊查询、聚合分析等。
    • 掌握复杂查询语句的编写和调试技巧。

深入阶段:

  1. 集群管理和扩展

    • 学习如何管理 Elasticsearch 集群,包括节点添加、副本管理、集群监控等。
    • 掌握集群扩展和容错机制,以支持大规模数据存储和高并发查询。
  2. 安全和权限控制

    • 了解如何配置安全功能,包括用户认证、访问控制等。
    • 学习如何保护敏感数据和防止安全漏洞。
  3. 实践项目和案例分析

    • 参与实际的项目开发或者开源项目,应用所学知识解决实际问题。
    • 分析和学习一些开源项目的 Elasticsearch 使用案例,了解实际应用场景。
  4. 持续学习和更新

    • 关注 Elasticsearch 官方文档、博客和社区活动,了解最新的特性和最佳实践。
    • 持续学习新的技术和工具,不断提升自己的 Elasticsearch 技能水平。

基本概念

总体介绍

文档(Document)

  • 文档是 Elasticsearch 存储的基本单位,它是一个 JSON 格式的数据对象。
  • 一个文档代表了一个数据实体,例如一篇文章、一条新闻、一部电影等。

索引(Index)

索引是一组相关文档的集合,类似于关系型数据库中的表。

每个文档都属于一个索引,索引通过名称来标识。

分片(Shard)

分片是索引的基本组成单元,它是存储在集群中的一个单独的 Lucene 实例。

索引可以被分成多个分片,每个分片可以存储部分数据,从而实现数据的水平分布和扩展。

副本(Replica)

副本是每个分片的一份复制,用于提高数据的可用性和容错能力。

副本也可以用来增加查询的并发性能,允许请求在多个副本之间负载均衡。

节点(Node)

节点是 Elasticsearch 集群中的一个服务器,它存储数据、参与索引和搜索操作。

一个节点可以拥有一个或多个分片,并且可以加入到集群中以扩展集群的容量和性能。

集群(Cluster)

集群是由一个或多个节点组成的 Elasticsearch 环境,它们共同存储数据和提供搜索和分析功能。

所有节点共享一个集群名称,并且通过集群名称来进行通信和协调工作。

查询(Query)

查询是用于搜索文档的操作,可以根据特定的条件来匹配和检索文档。

Elasticsearch 提供了丰富的查询语言和 API,包括全文搜索、字段匹配、范围查询、聚合分析等功能。

聚合(Aggregation)

聚合是对文档集合进行汇总、分析和统计的操作,用于生成有关数据的摘要信息。

聚合可以计算字段的平均值、最大值、最小值、总和等统计数据,并且支持多级嵌套的聚合操作。

部署

DSL

基本匹配查询 使用 match 查询查找包含特定词语的文档
精确匹配查询 使用 term 查询查找与特定字段值完全匹配的文档
范围查询 使用 range 查询查找符合特定范围条件的文档
布尔查询 创建一个包含多个条件的布尔查询,使用 must, should, must_not 子句组合条件。
模糊查询 使用 fuzzy 查询查找与给定词语相似的文档
通配符查询 使用 wildcardprefix 查询查找符合通配符模式或前缀的文档
组合查询 创建一个复杂的查询,包含多个查询条件,使用布尔查询组合它们
聚合查询 使用聚合查询分析数据,如计算字段的平均值、最大值、最小值等统计信息
嵌套查询 创建一个嵌套查询,用于在嵌套字段中搜索
分页和排序 使用 from, sizesort 控制分页和排序结果

SQL contrast DSL

SQL DSL
精确匹配 SELECT * FROM table WHERE field = 'value'; GET /[index]/_search
{
  "query": {
    "term": {
      "field": {
        "value": "value"
      }
    }
  }
}
模糊匹配查询 SELECT * FROM table WHERE field LIKE '%value%'; GET /[index]/_search
{
  "query": {
    "wildcard": {
      "field": "*value*"
    }
  }
}
 
范围查询 SELECT * FROM table WHERE field >= 10 AND field <= 20;
 
GET /[index]/_search
{
  "query": {
    "range": {
      "field": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}
 
布尔查询(AND) SELECT * FROM table WHERE field1 = 'value1' AND field2 = 'value2';
 
GET /[index]/_search
{
  "query": {
    "bool": {
      "must": [
        { "term": { "field1": "value1" } },
        { "term": { "field2": "value2" } }
      ]
    }
  }
}
 
布尔查询(OR) SELECT * FROM table WHERE field1 = 'value1' OR field2 = 'value2';
 
GET /[index]/_search
{
  "query": {
    "bool": {
      "should": [
        { "term": { "field1": "value1" } },
        { "term": { "field2": "value2" } }
      ]
    }
  }
}
 
插入 INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
 
POST /[index]/_doc
{
  "column1": "value1",
  "column2": "value2",
  ...
}
 
删除 DELETE FROM table_name WHERE condition;
 
DELETE /[index]/_doc/[document_id]
 
更新 UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
 
POST /[index]/_update/[document_id]
{
  "doc": {
    "column1": "value1",
    "column2": "value2"
  }
}
 
批量 批量插入、更新或删除在 SQL 中通常需要使用事务进行处理 POST /_bulk
{ "index": { "_index": "index_name", "_id": "document_id" } }
{ "column1": "value1", "column2": "value2" }
{ "delete": { "_index": "index_name", "_id": "document_id" } }
 
新增索引
 
PUT /[index]
删除索引 DELETE /[index]
刷新索引,最近的索引操作对搜索可见 POST /[index]/_refresh
优化指定索引的存储结构,以减少磁盘空间的使用和提高查询性能 POST /[index]/_optimize

Complex DSL

数据模型

  • 学习如何设计合适的索引结构,包括映射设置、字段类型选择等。
  • 理解索引设计对查询性能和存储效率的影响

进阶

ES优化

分片数量: 考虑数据量和查询负载、一般来说分片大小不超过50G、以免太大影响管理和备份。

分片大小: 避免过小或者过大的分片,太小会增加分片管理开销,分片太大会增加单个分片的搜索和写入压力

主分片和副本:设置合理的主分片和副本提供数据的可用性和容错能力,主分片通常和集群可用的节点数相同。副本则根据数据重要程度进行衡量

路由策略:确保索引的路由策略均匀分布在各个节点上,以充分利用集群资源。避免热点分片,即某些分片负载过重,可以通过重新分配分片或者自定义路由来解决。

映射设置: 使用映射类型和设置合适的字段数据类型,避免不必要的数据转换和分析开销

分析器[分词器]:选择合适的分析器和分析器设置以满足不同类型的搜索需求,例如中文等语言使用IK分词器以提高搜索的准确性

索引设置:索引的刷新间隔、索引存储、压缩方式等。根据数据更新频率和查询需求调整刷新间隔以平衡写入性能和索引性能

优化索引操作:避免频繁的索引创建、删除、更新操作,以减少集群负载和索引碎片化。定期执行索引优化、刷新、合并操作,以提高索引的性能和可用性

数据预热:对于常用的查询,将数据预加载到内存中,以提高查询性能和相应性能。使用preference参数指定查询优先选择的分片,以提高查询效率

日志管理:日志的级别和大小,减少磁盘空间的占用

硬件:  CPU、内存、磁盘。SSD硬盘对ES性能提升非常明显

负载均衡:配置合理的网络带宽和负载均衡。合理的分担请求压力

JVM设置: 调整JVM堆内存大小,设置垃圾回收参数

备份和恢复:定期数据备份和灾备方案,防止数据丢失

监控告警:对集群实时监控,设置告警及时发现和解决问题,资源监控。

定期维护:执行索引优化、索引刷新、索引合并等维护操作。保证索引的健康状态

集群管理和扩展

安全和权限控制

持续学习

Elasticsearch 平台 官方地址利用 Elasticsearch 平台和 AI 高效获得见解和推动成果转化。通过专为协助您构建、观测和保护数据而设计的企业解决方案,深入了解您的数据并找到重要答案。立即免费试用 Elasticsearch。...https://www.elastic.co/cn/