自学内容网 自学内容网

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 格式的查询:
          {
            "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 能够理解的查询形式,然后在索引中进行查找。在结果返回阶段,会对查询结果进行封装和处理,如根据排序和分页要求返回相应的结果集。

原文地址:https://blog.csdn.net/weixin_42267411/article/details/143702399

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