1. Elasticsearch 基础概念


文档摘要

Elasticsearch 基础概念 Elasticsearch 基础概念详解与实践 核心概念 索引 (Index): 类似于关系型数据库中的数据库。它是一个存储相关文档的集合。 文档 (Document): 类似于关系型数据库中的行。它是可以被索引的基本信息单元,通常以 JSON 格式表示。 字段 (Field): 类似于关系型数据库中的列。文档由多个字段组成,每个字段都有一个名称和数据类型。 类型 (Type): 在 Elasticsearch 之前,一个索引可以有多个类型。但从 8.x 开始,类型已被移除。可以将类型理解为逻辑上的表。 映射 (Mapping): 定义了文档及其包含的字段是如何被存储和索引的。它类似于数据库中的 schema。

1. Elasticsearch 基础概念

Elasticsearch 基础概念详解与实践

1. 核心概念

  • 索引 (Index): 类似于关系型数据库中的数据库。它是一个存储相关文档的集合。

  • 文档 (Document): 类似于关系型数据库中的行。它是可以被索引的基本信息单元,通常以 JSON 格式表示。

  • 字段 (Field): 类似于关系型数据库中的列。文档由多个字段组成,每个字段都有一个名称和数据类型。

  • 类型 (Type): 在 Elasticsearch 之前,一个索引可以有多个类型。但从 8.x 开始,类型已被移除。可以将类型理解为逻辑上的表。

  • 映射 (Mapping): 定义了文档及其包含的字段是如何被存储和索引的。它类似于数据库中的 schema。

  • 分片 (Shard): 索引被分割成多个分片,每个分片都是一个独立的 Lucene 索引。分片允许水平扩展 Elasticsearch 集群。

  • 副本 (Replica): 每个分片可以有零个或多个副本。副本提供高可用性和读取性能。

  • 集群 (Cluster): 由一个或多个节点组成的集合,它们共同存储整个数据。

  • 节点 (Node): 集群中的一个服务器。它可以存储数据、参与集群索引和搜索操作。

2. Elasticsearch 安装与配置

首先,你需要下载并安装 Elasticsearch。你可以从 Elasticsearch 官网下载对应平台的安装包。

安装完成后,你可以修改 elasticsearch.yml 文件来配置 Elasticsearch。常见的配置包括:

  • cluster.name: 集群名称

  • node.name: 节点名称

  • network.host: 监听地址

  • http.port: HTTP 端口

  • discovery.seed_hosts: 集群发现地址

  • cluster.initial_master_nodes: 初始化主节点

3. Elasticsearch REST API

Elasticsearch 提供了一组 REST API,用于执行各种操作,如索引、搜索、更新和删除文档。

3.1 索引操作

  • 创建索引:

    PUT /my_index { "settings": { "number_of_shards": 3, "number_of_replicas": 1 }, "mappings": { "properties": { "title": { "type": "text" }, "content": { "type": "text" }, "author": { "type": "keyword" }, "publish_date": { "type": "date" } } } }

    详解:

    • PUT /my_index: 指定要创建的索引名称为 my_index

    • settings: 定义索引的配置。

      • number_of_shards: 设置分片数量为 3。

      • number_of_replicas: 设置副本数量为 1。

    • mappings: 定义索引的映射。

      • properties: 定义文档的字段和类型。

        • title: 文本类型,用于全文搜索。

        • content: 文本类型,用于全文搜索。

        • author: 关键词类型,用于精确匹配。

        • publish_date: 日期类型,用于日期范围查询。

  • 添加文档:

    POST /my_index/_doc { "title": "Elasticsearch 基础", "content": "本文介绍了 Elasticsearch 的基础概念。", "author": "技术专家", "publish_date": "2023-10-27" }

    详解:

    • POST /my_index/_doc: 指定要添加文档到 my_index 索引的 _doc 类型。

    • JSON 内容: 包含文档的字段和值。

  • 获取文档:

    GET /my_index/_doc/1

    详解:

    • GET /my_index/_doc/1: 指定要从 my_index 索引的 _doc 类型中获取 ID 为 1 的文档。
  • 更新文档:

    PUT /my_index/_doc/1 { "title": "Elasticsearch 基础进阶", "content": "本文深入介绍了 Elasticsearch 的基础概念。", "author": "技术专家", "publish_date": "2023-10-27" }

    详解:

    • PUT /my_index/_doc/1: 指定要更新 my_index 索引的 _doc 类型中 ID 为 1 的文档。

    • JSON 内容: 包含更新后的文档字段和值。 注意: 这将替换整个文档。

    或者使用 _update API 进行部分更新:

    POST /my_index/_doc/1/_update { "doc": { "title": "Elasticsearch 基础高级" } }

    详解:

    • POST /my_index/_doc/1/_update: 指定要更新 my_index 索引的 _doc 类型中 ID 为 1 的文档的部分内容。

    • doc: 包含要更新的字段和值。 只更新 title 字段。

  • 删除文档:

    DELETE /my_index/_doc/1

    详解:

    • DELETE /my_index/_doc/1: 指定要从 my_index 索引的 _doc 类型中删除 ID 为 1 的文档。
  • 删除索引:

    DELETE /my_index

    详解:

    • DELETE /my_index: 指定要删除的索引名称为 my_index慎用!

3.2 搜索操作

  • 简单查询:

    GET /my_index/_search?q=Elasticsearch

    详解:

    • GET /my_index/_search: 指定要搜索 my_index 索引。

    • q=Elasticsearch: 使用 q 参数指定查询字符串,搜索包含 "Elasticsearch" 的文档。

  • 使用 Query DSL:

    GET /my_index/_search { "query": { "match": { "content": "Elasticsearch" } } }

    详解:

    • GET /my_index/_search: 指定要搜索 my_index 索引。

    • query: 定义查询条件。

      • match: 执行全文匹配查询。

        • content: 指定要搜索的字段为 content

        • Elasticsearch: 指定要搜索的关键词为 "Elasticsearch"。

  • 范围查询:

    GET /my_index/_search { "query": { "range": { "publish_date": { "gte": "2023-10-01", "lte": "2023-10-31" } } } }

    详解:

    • GET /my_index/_search: 指定要搜索 my_index 索引。

    • query: 定义查询条件。

      • range: 执行范围查询。

        • publish_date: 指定要搜索的字段为 publish_date

        • gte: 指定下限(大于等于)。

        • lte: 指定上限(小于等于)。

  • 布尔查询:

    GET /my_index/_search { "query": { "bool": { "must": [ { "match": { "content": "Elasticsearch" } }, { "match": { "author": "技术专家" } } ] } } }

    详解:

    • GET /my_index/_search: 指定要搜索 my_index 索引。

    • query: 定义查询条件。

      • bool: 执行布尔查询。

        • must: 所有条件必须匹配。

          • match: 执行全文匹配查询,搜索 content 字段包含 "Elasticsearch" 的文档。

          • match: 执行全文匹配查询,搜索 author 字段包含 "技术专家" 的文档。

  • 分页查询:

    GET /my_index/_search { "from": 0, "size": 10, "query": { "match_all": {} } }

    详解:

    • GET /my_index/_search: 指定要搜索 my_index 索引。

    • from: 指定起始位置(从 0 开始)。

    • size: 指定每页大小。

    • query: 定义查询条件。

      • match_all: 匹配所有文档。

4. 映射 (Mapping)

映射定义了文档中的字段是如何被索引的。例如,你可以指定字段的数据类型、是否要被索引、使用的分析器等。

PUT /my_index { "mappings": { "properties": { "title": { "type": "text", "analyzer": "standard" }, "content": { "type": "text", "analyzer": "ik_max_word" }, "author": { "type": "keyword" }, "publish_date": { "type": "date", "format": "yyyy-MM-dd" } } } }

详解:

  • title: 使用 standard 分析器进行分析,适合英文文本。

  • content: 使用 ik_max_word 分析器进行分析,适合中文文本 (需要安装 IK 分词器插件)。

  • author: keyword 类型,不会进行分词,适合精确匹配。

  • publish_date: date 类型,指定日期格式为 yyyy-MM-dd

5. 分片与副本

Elasticsearch 将索引分割成多个分片,每个分片都是一个独立的 Lucene 索引。副本是分片的拷贝,用于提供高可用性和读取性能。

  • 分片: 允许水平扩展 Elasticsearch 集群,提高存储容量和搜索性能。

  • 副本: 提高数据的可用性,防止数据丢失。当主分片发生故障时,副本可以自动升级为新的主分片。同时,副本也可以分担读取请求,提高搜索性能。

6. 总结

本文介绍了 Elasticsearch 的基础概念,包括索引、文档、字段、映射、分片、副本等。并通过代码示例和图表进行了说明。掌握这些基础概念是学习和使用 Elasticsearch 的关键。

希望本文能帮助你更好地理解 Elasticsearch! 请根据实际情况进行修改和调整。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U