博客
关于我
ElasticSearch Restful各种常用操作示范代码
阅读量:113 次
发布时间:2019-02-26

本文共 2459 字,大约阅读时间需要 8 分钟。

Elasticsearch 7.x安装教程:非本地可访问配置

Elasticsearch(简称ES)是一种基于分布式的搜索引擎,能够对结构化数据进行高效的存储和检索。与传统数据库(如MySQL、PostgreSQL等)相比,ES具有更高的灵活性和扩展性。以下将从基本结构、数据存储对比以及操作方式等方面详细阐述ES的特点,并结合实际案例说明增删改查操作过程。

基本结构:传统数据库与ES对比

以下是传统数据库和Elasticsearch之间的主要对比:

传统数据库 Elasticsearch
数据库 index
type
字段 id
记录 文档

数据存储对比

传统数据库存储以行为单位,而Elasticsearch则以文档为单位存储数据:

传统数据库 Elasticsearch
varchar字符串、int整数等类型的字段组成的一行行记录 JSON格式的文档

操作方式

传统数据库主要通过SQL语句进行操作,而Elasticsearch则采用基于RESTful风格的域名式语言(DSL)。以下是两者的对比:

传统数据库 Elasticsearch
SQL语句 Restful风格的DSL

基操:增删改查

以下将通过一个学校的实际案例,说明如何在Elasticsearch中进行增删改查操作。

添加数据

添加一条新数据记录,可以通过以下方式实现:

POST http://[IP地址]:9200/[index名]/[type名]/[documentID]

例如,添加一班的小红(直接带id式插入):

POST http://[IP地址]:9200/school/class_1/xiaohong{  "name": "小红",  "age": 18,  "height": 165,  "tags": ["学习认真", "学霸", "漂亮"]}

如果不带id,系统会自动生成一个唯一的id。

添加的小白用于后续删除:

POST http://[IP地址]:9200/school/class_1/xiaobai{  "name": "小白",  "age": 18,  "height": 165}

删除数据

删除一条数据记录可以通过以下方式实现:

DELETE http://[IP地址]:9200/school/class_1/xiaobai

删除成功后,可以从结果中查看到记录已被删除。

修改数据

修改数据可以分为两种情况:

1. 全部修改:通过PUT请求替换整个文档:

PUT http://[IP地址]:9200/school/class_1/xiaohong{  "name": "小红",  "age": 19,  "height": 170,  "tags": ["学习认真", "学霸", "漂亮"]}

2. 部分修改:通过POST请求更新特定字段:

POST http://[IP地址]:9200/school/class_1/xiaohong/_update{  "doc": {    "age": 20  }}

查询数据

查询所有数据可以通过以下方式实现:

GET http://[IP地址]:9200/school/class_1/_search

查询结果如下:

{  "hits": [    {      "_source": {        "name": "小红",        "age": 20,        "height": 170,        "tags": ["学习认真", "学霸", "漂亮"]      }    },    {      "_source": {        "name": "无名",        "age": 17,        "height": 175,        "tags": ["学习认真", "学霸"]      }    },    {      "_source": {        "name": "小李",        "age": 22,        "height": 176,        "tags": ["调皮", "学渣"]      }    }  ]}

查询年龄在18及以上的同学可以使用以下查询:

POST http://[IP地址]:9200/school/class_1/_search{  "query": {    "bool": {      "filter": [        {          "range": {            "age": {              "gte": 18            }          }        }      ]    }  },  "size": 10}

查询优化

Elasticsearch提供了丰富的查询和聚合功能,可以通过合理的查询策略提高搜索效率。常用的查询包括:

1. 匹配某字段等于某个值:

{  "term": {    "name": "小红"  }}

2. 匹配某字段多个值:

{  "terms": ["小红", "小白"]}

3. 范围筛选:

{  "range": {    "age": {      "gte": 18    }  }}

4. 时间范围筛选:

{  "range": {    "finished_time": {      "gt": "now-1d"    }  }}

5. 时间聚合分桶:

{  "aggs": {    "my_date_buckets": {      "date_histogram": {        "field": "finished_time",        "fixed_interval": "10m"      }    }  }}

通过上述方法,可以对数据进行精确的查询和高效的聚合分析。

转载地址:http://yfiu.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 一文带你读懂YOLOv1~YOLOv11(建议收藏!)
查看>>
OpenCV与AI深度学习 | 五分钟快速搭建一个实时人脸口罩检测系统(OpenCV+PaddleHub 含源码)
查看>>
OpenCV与AI深度学习 | 什么是 COCO 数据集?
查看>>
OpenCV与AI深度学习 | 低对比度缺陷检测应用实例--LCD屏幕脏污检测
查看>>
OpenCV与AI深度学习 | 使用 MoveNet Lightning 和 OpenCV 实现实时姿势检测
查看>>
OpenCV与AI深度学习 | 使用 OpenCV 创建自定义图像滤镜
查看>>
OpenCV与AI深度学习 | 使用 SAM 和 Grounding DINO 分割卫星图像
查看>>
OpenCV与AI深度学习 | 使用OpenCV图像修复技术去除眩光
查看>>
OpenCV与AI深度学习 | 使用OpenCV检测并计算直线角度
查看>>
OpenCV与AI深度学习 | 使用OpenCV轮廓检测提取图像前景
查看>>
OpenCV与AI深度学习 | 使用Python和OpenCV实现火焰检测(附源码)
查看>>
OpenCV与AI深度学习 | 使用PyTorch进行小样本学习的图像分类
查看>>
OpenCV与AI深度学习 | 使用YOLO11实现区域内目标跟踪
查看>>
OpenCV与AI深度学习 | 使用YOLOv8做目标检测、实例分割和图像分类(包含实例操作代码)
查看>>
OpenCV与AI深度学习 | 使用单相机对已知物体进行3D位置估计
查看>>
OpenCV与AI深度学习 | 初学者指南 -- 什么是迁移学习?
查看>>
OpenCV与AI深度学习 | 十分钟掌握Pytorch搭建神经网络的流程
查看>>
OpenCV与AI深度学习 | 基于GAN的零缺陷样本产品表面缺陷检测
查看>>
OpenCV与AI深度学习 | 基于OpenCV和深度学习预测年龄和性别
查看>>
OpenCV与AI深度学习 | 基于OpenCV实现模糊检测 / 自动对焦
查看>>