【数据库】Elasticsearch的操作

news/2024/11/15 8:22:25/

在关系数据库和Elasticsearch之间,对基本概念和数据结构的理解对于使用两者进行有效的数据操作非常关键。下面是关系数据库和Elasticsearch之间的基本概念比较,包括实际的应用例子:

对比数据库的概念

数据库与索引

关系数据库

在关系数据库中,一个数据库是存储表格的集合。每个数据库实例可以包含多个表格,这些表格通常通过外键关系相互连接,使得表之间可以相互引用对方的数据,从而形成关联关系。

示例:创建一个名为 example_db 的数据库。

CREATE DATABASE example_db;
Elasticsearch

在Elasticsearch中,对应的概念是索引(Index)。每个索引是存储相关文档的集合,并且可以被看作是关系数据库中一个数据库的等效物。Elasticsearch允许在一个集群中创建和管理多个索引。

示例:创建一个名为 example_index 的索引。

PUT /example_index
{"settings": {"number_of_shards": 1,"number_of_replicas": 1}
}

在这个示例中,我们定义了索引的基本配置,如分片数和副本数,这些是控制索引存储和性能的关键参数。

表与文档

关系数据库

在关系数据库中,(Table)是数据的行列结构组织形式,其中定义了列(字段)和可能的数据类型约束,每行(记录)包含具体的数据项。

示例:创建一个表 users

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(255),email VARCHAR(255)
);
Elasticsearch

在Elasticsearch中,与表对应的是一组文档。每个文档都是一个包含多个字段的结构化数据项,文档被组织在索引中。Elasticsearch不强制要求文档遵守严格的模式。

示例:在 users 索引中定义文档的结构(映射)。

PUT /users
{"mappings": {"properties": {"username": { "type": "text" },"email": { "type": "keyword" }}}
}

这里,mappings 定义了文档中各个字段的数据类型。

具体的操作实例

了解Elasticsearch的基本操作是非常重要的,特别是当你对比其与传统关系数据库的相应操作时。这里我将列出在关系数据库和Elasticsearch中进行相似操作的例子,以进一步帮助您理解这两者之间的对应关系及操作语法差异。

1. 创建数据库 / 索引

  • 关系数据库 (如 MySQL)
    CREATE DATABASE example_db;
    
  • Elasticsearch
    PUT /example_index
    

2. 创建表 / 索引的映射

  • 关系数据库 (如 MySQL)
    CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(255),email VARCHAR(255)
    );
    
  • Elasticsearch
    PUT /users
    {"mappings": {"properties": {"username": { "type": "text" },"email": { "type": "keyword" }}}
    }
    

3. 插入数据 / 添加文档

  • 关系数据库 (如 MySQL)
    INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
    
  • Elasticsearch
    POST /users/_doc
    {"username": "john_doe","email": "john@example.com"
    }
    

4. 查询数据

  • 关系数据库 (如 MySQL)
    SELECT * FROM users WHERE username = 'john_doe';
    
  • Elasticsearch
    GET /users/_search
    {"query": {"match": {"username": "john_doe"}}
    }
    

5. 更新数据

  • 关系数据库 (如 MySQL)
    UPDATE users SET email = 'new_john@example.com' WHERE username = 'john_doe';
    
  • Elasticsearch
    POST /users/_update_by_query
    {"script": {"source": "ctx._source.email = 'new_john@example.com'","lang": "painless"},"query": {"match": {"username": "john_doe"}}
    }
    

6. 删除数据

  • 关系数据库 (如 MySQL)
    DELETE FROM users WHERE username = 'john_doe';
    
  • Elasticsearch
    POST /users/_delete_by_query
    {"query": {"match": {"username": "john_doe"}}
    }
    

7. 删除表 / 删除索引

  • 关系数据库 (如 MySQL)
    DROP TABLE users;
    
  • Elasticsearch
    DELETE /users
    

这些示例展示了在关系数据库和Elasticsearch中执行相似任务的基本语法差异。在Elasticsearch中,几乎所有操作都可以通过HTTP请求来完成,而传统的SQL数据库则使用SQL语句。这种区别在于Elasticsearch的设计初衷是为了高效的搜索和分析大规模数据集,而关系数据库则侧重于数据完整性和结构化数据的精确查询。


http://www.ppmy.cn/news/1452998.html

相关文章

Django之配置数据库

一,创建项目 二,将项目的setting.py中的 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }替换成如下(以mysql为例) DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: …

LWIP+TCP服务器

一、完整代码 tcp_server.c #include "tcp_server.h" #include <stdlib.h> #include <stdio.h> #include <string.h>void Tcp_Server_Init(void) {struct tcp_pcb *tcp_server_pcb;/* 为tcp服务器分配一个tcp_pcb结构体 */tcp_server_pcb tc…

Linux内核--设备驱动(五)USB Gadget梳理

目录 一、引言 二、USB ------>2.1、USB设备的接入 ------>2.2、USB设备枚举 ------>2.3、UAC设备 ------>2.4、UVC设备 ------>2.5、USB 主机控制器及OTG实现方式 ------>2.6、USB HOST之EHCI和OHCI与对应的dts节点及驱动 ------>2.7、USB设备接…

ApiHug 官方站点

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplacehttps://…

华为机考入门python3--(21)牛客21- 简单密码

分类&#xff1a;字符串 知识点&#xff1a; 字符的Unicode码 num ord(my_char) 一个整数转换为一个对应的 ASCII 字符 my_char chr(num) 题目来自【牛客】 import sysdef transform_password(password):result ""for char in password:if a < char…

微图乐 多种装B截图一键制作工具(仅供娱乐交流)

软件介绍 采用exe进程交互通信。全新UI界面&#xff0c;让界面更加清爽简约。支持zfb、VX、TX、Yin行、Dai款、游戏等图片生成&#xff0c;一键超清原图复制到剪辑板&#xff0c;分享给好友。适用于提高商家信誉度&#xff0c;产品销售额度。装逼娱乐&#xff0c;用微图乐。图…

考研入门55问---基础知识篇

考研入门55问---基础知识篇 01 &#xff1e;什么是研究生入学考试&#xff1f; 研究生是指大专和本科之后的深造课程。以研究生为最高学历, 研究生毕业后&#xff0c;也可称研究生&#xff0c;含义为研究生学历的人。在中国大陆地区&#xff0c;普通民众一般也将硕士毕业生称…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-11.1,11.2-BSP文件目录组织

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…