Elasticsearch(ES)简介

  1. Elasticsearch(ES)简介
    • 定义与功能
      • Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎。它基于 Lucene 库构建,用于存储、搜索和分析大量数据。其主要功能包括全文搜索、结构化搜索、数据分析等。例如,在一个电商网站中,可以使用 ES 来搜索商品名称、描述等文本信息(全文搜索),也可以根据价格、库存等数值或类别字段进行筛选(结构化搜索),同时还能进行一些数据分析,如统计热门商品、用户搜索行为分析等。
    • 核心概念
      • 索引(Index):类似于传统数据库中的数据库概念,是文档的集合。例如,一个电商网站可能有一个名为 "products" 的索引,用于存储所有商品信息相关的文档。
      • 文档(Document):是可以被索引的基本信息单元,以 JSON 格式存储。在 "products" 索引中,每个商品的详细信息(如名称、价格、描述等)就是一个文档。
      • 类型(Type):在较新版本的 ES 中,类型的概念被弱化。它曾经用于在一个索引中区分不同类别的文档。例如,在 "products" 索引中,可以有 "electronics" 类型和 "clothes" 类型的文档,分别代表电子产品和服装产品,但现在更推荐为不同类型的文档创建不同的索引。
      • 字段(Field):文档由多个字段组成,每个字段存储文档的一个属性。如商品文档中的 "name"、"price" 等就是字段。
  2. ES 的使用
    • 安装与配置
      • 下载与安装 :可以从 Elasticsearch 官方网站下载适合操作系统的安装包。安装完成后,通过命令行启动 ES 服务。例如,在 Linux 系统中,进入 ES 安装目录的bin文件夹,执行./elasticsearch命令来启动服务。
      • 配置文件修改 :ES 的配置文件(elasticsearch.yml)可以用于修改一些重要的配置参数,如集群名称、节点名称、监听地址等。例如,可以修改cluster.name参数来设置集群名称,不同的 ES 节点只有在集群名称相同的情况下才能组成一个集群。
    • 数据操作
      • 索引创建 :通过 RESTful API 或相关的客户端库(如 Java High - Level REST Client)来创建索引。例如,使用curl -X PUT "http://localhost:9200/my_index"命令可以创建一个名为 "my_index" 的索引。
      • 文档插入 :向索引中插入文档,格式为 JSON。例如,使用curl -X POST "http://localhost:9200/my_index/_doc" -H 'Content - Type: application/json' -d '{"name": "product1", "price": 10.0}'可以向 "my_index" 索引中插入一个包含 "name" 和 "price" 字段的文档。
      • 查询操作
        • 简单查询 :可以进行简单的匹配查询,如查询 "my_index" 索引中 "name" 字段包含 "product" 的文档。使用curl -X GET "http://localhost:9200/my_index/_search?q=name:product"命令。

        • 复杂查询(DSL - Query Domain Specific Language) :使用 DSL 可以构建更复杂的查询。例如,查询价格大于 10 且小于 20 的商品文档,使用以下 JSON 格式的查询:

          html 复制代码
          {
            "query": {
              "range": {
                "price": {
                  "gt": 10,
                  "lt": 20
                }
              }
            }
          }

          通过curl -X GET "http://localhost:9200/my_index/_search" -H 'Content - Type: application/json' -d '上述JSON查询内容'来执行查询。

        • 数据更新与删除

          • 更新 :可以部分更新文档的字段。例如,使用curl -X POST "http://localhost:9200/my_index/_update/文档ID" -H 'Content - Type: application/json' -d '{"doc": {"price": 15.0}}来更新指定文档的价格字段。
          • 删除 :删除索引或文档。使用curl -X DELETE "http://localhost:9200/my_index/_doc/文档ID"可以删除指定文档,使用curl -X DELETE "http://localhost:9200/my_index"可以删除整个索引。
    • ES 源码分析(以简单的角度)
      • 启动流程分析
        • 在 ES 启动时,org.elasticsearch.bootstrap.Elasticsearch类是入口点。它会加载配置文件,解析命令行参数,然后启动节点。主要的步骤包括初始化安全模块、插件服务、节点环境等。例如,在Node类的构造函数中,会创建各种服务(如索引服务、集群服务等),这些服务的创建涉及到一系列的初始化操作,如加载索引元数据、建立集群通信等。
      • 索引操作源码分析
        • 索引创建 :在org.elasticsearch.indices.IndicesService类中,createIndex方法负责创建索引。它会进行一系列的验证和初始化操作,包括检查索引名称的合法性、创建索引的元数据(如映射信息)等。在创建过程中,会涉及到与存储模块(如磁盘存储)的交互,将索引的元数据持久化到磁盘上。
        • 文档插入 :文档插入操作主要涉及到org.elasticsearch.action.index.IndexRequestorg.elasticsearch.action.index.IndexResponse类。当执行文档插入请求时,请求会经过一系列的处理器,如TransportIndexAction类会处理索引操作在节点间的传输。在存储层,文档会被写入到 Lucene 索引中,这个过程涉及到对文档进行分词(如果是文本字段)、构建倒排索引等操作,这些操作主要在 Lucene 的相关类中实现,ES 通过封装 Lucene 来提供更高级的功能。
      • 查询操作源码分析
        • 简单查询 :对于简单查询(如通过q参数的查询),org.elasticsearch.rest.action.search.RestSearchAction类会解析查询参数,然后构建一个基本的查询请求。这个请求会被传递到查询执行引擎,在引擎内部,会根据查询类型(如全文查询或结构化查询)进行不同的处理。
        • 复杂查询(DSL) :当使用 DSL 进行查询时,org.elasticsearch.search.SearchRequestorg.elasticsearch.search.SearchResponse类参与其中。SearchRequest用于构建复杂的查询请求,它包含了查询条件、排序方式、分页信息等。在查询执行过程中,会根据请求中的查询条件(如range查询中的范围条件),通过解析器将其转换为 Lucene 能够理解的查询形式,然后在索引中进行查找。在结果返回阶段,会对查询结果进行封装和处理,如根据排序和分页要求返回相应的结果集。
相关推荐
小飞Coding2 小时前
ES 性能调优核心:读懂线程栈,告别“请求被拒绝”与“集群卡顿”
elasticsearch
昨夜见军贴06162 小时前
AI审核守护生命设备安全:IACheck成为呼吸机消毒效果检测报告的智能审核专家
大数据·人工智能·安全
Elastic 中国社区官方博客3 小时前
现已正式发布: Elastic Cloud Hosted 上的托管 OTLP Endpoint
大数据·运维·数据库·功能测试·elasticsearch·全文检索
D愿你归来仍是少年3 小时前
Flink 并行度变更时 RocksDB 状态迁移的关键机制与原理
大数据·flink·apache
小飞Coding3 小时前
一文吃透 Elasticsearch 索引模板+别名:零误导、可复现的生产级实践
elasticsearch
昨夜见军贴06163 小时前
AI审核守护透析安全:IACheck助力透析微生物检测报告精准合规
大数据·人工智能·安全
新新学长搞科研3 小时前
【高届数会议征稿】第十二届传感云和边缘计算系统国际会议(SCECS 2026)
大数据·人工智能·生成对抗网络·边缘计算·传感器·学术会议
科技前瞻观察3 小时前
国内科技领先的企业有哪些
大数据
Data-Miner4 小时前
57页可编辑PPT | 大数据决策分析平台建设方案
大数据
TMT星球4 小时前
从智能出行到智能家电,探路生态携智能空间全栈产品矩阵亮相AWE
大数据·人工智能·矩阵