自学内容网 自学内容网

Elasticsearch学习之路

h5打开以查看

Elasticsearch 不仅仅是一个搜索引擎,更是一个强大的分布式数据分析引擎。

阶段一:入门 - 理解核心,搭建环境

这个阶段的目标是理解 Elasticsearch 是什么,能做什么,并成功运行起来。

1. 核心概念理解
  • 是什么? Elasticsearch 是一个基于 Lucene 构建的、开源的、分布式、RESTful 的搜索和分析引擎。

  • 核心概念类比(与数据库对比):

Elasticsearch传统关系型数据库 (MySQL)说明
索引Database一类数据的集合,是最高层级。
文档Row一条具体的数据,是基本存储单元。
字段Column文档的属性。
映射Schema定义字段的数据类型(如 text, keyword, integer)。
类型Table注意:在 7.x 之后版本中已被弃用,一个索引默认只包含一个 _doc 类型。
  • 分布式特性:

    • 节点: 一个运行的 ES 实例。

    • 集群: 由一个或多个节点组成。

    • 分片: 索引可以被分成多个分片,分布到不同节点上。这是实现分布式和水平扩展的核心。

      • 主分片: 负责数据的读写。

      • 副本分片: 主分片的拷贝,提供高可用性和提升读性能。

2. 安装与运行
  1. 安装 Elasticsearch:

    • 直接下载: 从 官网 下载,解压运行 ./bin/elasticsearch

    • 使用 Docker(推荐,方便快捷):

    bash

    docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "xpack.security.enabled=false" docker.elastic.co/elasticsearch/elasticsearch:8.10.2
    • -p 9200:9200: HTTP API 端口。

    • -p 9300:9300: 节点间通信端口。

    • discovery.type=single-node: 单节点模式,适合学习。

    • xpack.security.enabled=false: 禁用安全认证,方便测试。

  2. 验证安装:
    浏览器访问 http://localhost:9200,你会看到一个包含集群信息的 JSON。

  3. 安装 Kibana(强烈推荐):
    Kibana 是 ES 的数据可视化和管理工具。

    bash

    docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:8.10.2

    访问 http://localhost:5601 即可打开 Kibana 界面。

3. 第一个 CRUD 操作

使用 Kibana 的 Dev Tools 控制台进行操作,它提供了非常方便的界面来编写 REST API 请求。

  • 创建索引:

    json

    PUT /my-first-index
  • 插入文档(指定 ID):

    json

    PUT /my-first-index/_doc/1
    {
      "title": "Hello Elasticsearch",
      "content": "This is my first document.",
      "tags": ["tech", "search"],
      "created_at": "2023-10-01"
    }
  • 查询文档:

    json

    GET /my-first-index/_doc/1
  • 更新文档:

    json

    POST /my-first-index/_update/1
    {
      "doc": {
        "content": "This is my updated first document."
      }
    }
  • 删除文档:

    json

    DELETE /my-first-index/_doc/1
  • 搜索文档_search API):

    json

    GET /my-first-index/_search
    {
      "query": {
        "match": {
          "content": "updated"
        }
      }
    }

阶段二:进阶 - 掌握搜索、聚合与映射

这个阶段的目标是能够熟练使用 ES 进行复杂查询和数据分析。

1. 查询 DSL

Elasticsearch 使用基于 JSON 的 DSL 进行查询。

  • 基本查询类型:

    • match: 全文检索,会对查询词进行分词。

    • term: 精确匹配,不对查询词进行分词,直接匹配字段的精确值。

    • range: 范围查询(gt, gte, lt, lte)。

    • bool: 组合查询(must AND, should OR, must_not NOT)。

      json

      GET /my-first-index/_search
      {
        "query": {
          "bool": {
            "must": [
              { "match": { "content": "document" } }
            ],
            "must_not": [
              { "term": { "tags": "beginner" } }
            ]
          }
        }
      }
2. 聚合分析

聚合提供了分组和提取统计信息的能力,类似于 SQL 的 GROUP BY 和聚合函数。

  • 指标聚合: 如 avgsumminmaxvalue_count

  • 桶聚合: 将文档分组到不同的桶中。

    • terms: 按字段值分组。

    • date_histogram: 按时间间隔分组。

    • range: 按数值范围分组。

示例:统计每个标签下的文档数量

json

GET /my-first-index/_search
{
  "size": 0, // 不返回原始命中结果
  "aggs": {
    "tags_agg": {
      "terms": {
        "field": "tags.keyword", // 注意:对于分词的text字段,通常使用.keyword子字段
        "size": 10
      }
    }
  }
}
3. 映射与分词
  • 映射: 定义字段的类型和属性,至关重要!

    • 核心类型: text(会分词), keyword(不分词,用于精确匹配和聚合), longintegerdatebooleanobjectnested

    • 查看映射: GET /my-index/_mapping

  • 分词器: 将文本转换为倒排索引中的词条。

    • 标准分词器: 默认选择。

    • IK 分词器: 中文分词的必备插件。你需要安装并配置它来处理中文。


阶段三:精通 - 集群管理、性能调优与生态集成

这个阶段的目标是深入理解分布式原理,并能处理生产环境中的问题。

1. 集群管理与监控
  • 查看集群健康状态: GET _cluster/health

  • 查看节点信息: GET _cat/nodes?v

  • 查看分片分配: GET _cat/shards?v

  • 使用 Kibana 的 Monitoring 功能: 可视化监控集群性能指标。

2. 性能调优
  • 索引设计

    • 合理设置主分片数量(一旦创建不能修改)。

    • 合理设置副本数量(可以动态调整)。

  • 映射优化

    • 明确字段类型,避免动态映射。

    • 对于不需要搜索的字段,使用 "index": false

    • 合理使用 keyword 和 text

  • 查询优化

    • 避免深度分页(使用 search_after)。

    • 使用 filter 上下文缓存结果,提升查询速度。

    • 只返回需要的字段(_source filtering)。

3. 生态集成
  • Logstash: 数据采集、转换和导入到 ES 的管道。构成 ELK Stack

  • Beats: 轻量级数据采集器(如 Filebeat 用于日志文件,Metricbeat 用于系统指标)。

  • Ingest Node: ES 节点自身的数据预处理管道,可以在索引前对文档进行加工。

h5打开以查看


原文地址:https://blog.csdn.net/pan303507479/article/details/154336590

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!