【ElasticSearch】es索引、映射、文档基本操作复杂查询

在这里插入图片描述

  各位小伙伴们大家好,欢迎来到这个小扎扎的ElasticSearch专栏,本篇博客由B战尚硅谷的ElasticSearch视频总结而来,鉴于 看到就是学到、学到就是赚到 精神,这波依然是血赚 ┗|`O′|┛

🌆 内容速览

  • 1 es数据格式
  • 2 es基础操作
    • 2.1 索引的增删查
      • 2.1.1 创建索引
      • 2.1.2 查询索引
      • 2.1.3 删除索引
    • 2.2 映射操作
      • 2.2.1 创建映射
      • 2.2.2 查看映射
    • 2.3 文档的增删改查
      • 2.3.1 创建文档
      • 2.3.2 查询文档
      • 2.3.3 修改文档
      • 2.3.4 删除文档
  • 3 复杂查询
    • 3.1 条件分页查询
      • 3.1.1 查询所有
      • 3.1.2 条件查询
      • 3.1.3 分页条件查询
      • 3.1.4 指定字段返回
      • 3.1.5 指定字段排序
    • 3.2 多字段查询
      • 3.2.1 and条件
      • 3.2.2 or条件
      • 3.2.3 值范围查询
      • 3.2.4 全文检索、完全匹配
      • 3.2.5 高亮返回
    • 3.3 函数查询
      • 3.3.1 分组group by
      • 3.3.2 求和sum
      • 3.3.3 求平均值avg
      • 3.3.4 最大值max
      • 3.3.5 最小值min
      • 3.3.6 一次返回count/max/min/avg/sum
      • 3.3.7 去重后取总数

1 es数据格式

  Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,可以将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比。ES 里的 Index 可以看做一个库,而 Types 相当于表,Documents 则相当于表的行。在这里插入图片描述

需要注意的是:这里 Types 的概念已经被逐渐弱化,Elasticsearch 6.X 中,一个 index 下已经只能包含一个type,Elasticsearch 7.X 中, Type 的概念已经被删除。

2 es基础操作

2.1 索引的增删查

2.1.1 创建索引

  对比关系型数据库,创建索引就等同于创建数据库。通过apifox等工具,向 ES 服务器发 PUT 请求即为创建索引
http://服务器ip:9200/索引名
  
在这里插入图片描述

2.1.2 查询索引

查询指定索引

GET 请求即为查询指定索引
在这里插入图片描述

查看所有的索引信息

GET 请求
http://服务器ip:9200/_cat/indices?v
在这里插入图片描述

2.1.3 删除索引

DELETE 请求即为删除指定索引
在这里插入图片描述

2.2 映射操作

  映射就像是mysql数据表中对字段的限制一样,映射可以指定文档的类型以及能否使用索引

2.2.1 创建映射

PUT 请求
http://服务器ip:9200/索引名/_mapping

{
    "properties": {
        "title": {
            "type": "text",
            "index": true
        },
        "category": {
            "type": "keyword",
            "index": true
        },
        "images": {
            "type": "text",
            "index": false
        },
        "price": {
            "type": "long",
            "index": true
        }
    }
}

在这里插入图片描述
📌 index的值若为false的话,即不可被索引,无法通过match等方式进行匹配
📌 store:是否将数据进行独立存储,默认为 false。获取独立存储的字段要比从_source 中解析快得多,但是也会占用更多的空间,所以要根据实际业务需求来设置。
📌 analyzer:分词器,这里的 ik_max_word 即使用 ik 分词器,后面讲解

2.2.2 查看映射

GET 请求
http://服务器ip:9200/索引名/_mapping
在这里插入图片描述

2.3 文档的增删改查

2.3.1 创建文档

向指定索引中添加文档(随机id)

POST 请求
http://服务器ip:9200/索引名/_doc
在这里插入图片描述
📌与索引操作不同的一点是,post请求的请求体中必须包含JSON格式的数据

向指定索引中添加文档(指定id)
  如果通过以上请求创建文档的话,会对该文档返回一个随机生成的_id,后面需要通过该_id对文档进行查询。显而易见,这个随机生成的_id并不容易记忆,于是我们可以通过加一层请求的方式指定文档的_id进行创建

POST 请求
http://服务器ip:9200/索引名/_doc/id值在这里插入图片描述

2.3.2 查询文档

查询指定索引下的指定文档

GET 请求
http://服务器ip:9200/索引名/_doc/id值
在这里插入图片描述

查询指定索引下的所有文档

GET 请求
http://服务器ip:9200/索引名/_search
在这里插入图片描述

2.3.3 修改文档

覆盖性修改(全量更新)

PUT 请求
http://服务器ip:9200/索引名/_doc/id值
在这里插入图片描述
📌全量更新的请求体中需要是全部的字段及值,因为是覆盖性修改,如果缺值的话之前的字段值就会不见

字段修改(局部更新)

POST 请求
http://服务器ip:9200/索引名/_update/id值
在这里插入图片描述
📌局部更新只需要在doc中嵌套想要修改的字段及值,未指定的字段值将保持原状不变
📌如果doc中嵌套的字段在之前的文档中不存在的话,将会作为新的字段及值添加到该文档中

2.3.4 删除文档

DELETE 请求
http://服务器ip:9200/索引名/_doc/id值
在这里插入图片描述
📌如果重复删除或者删除一个不存在的文档,会返回result:not_found

3 复杂查询

3.1 条件分页查询

3.1.1 查询所有

GET 请求
http://服务器ip:9200/索引名/_search

{
    "query": {
        "match_all": {
            
        }
    }
}

在这里插入图片描述

3.1.2 条件查询

GET 请求
http://服务器ip:9200/索引名/_search

{
    "query": {
        "match": {
            "category": "华为"
        }
    }
}

在这里插入图片描述

3.1.3 分页条件查询

GET 请求
http://服务器ip:9200/索引名/_search

{
    "query": {
        "match": {
            "category": "华为"
        }
    },
    "from": 0,
    "size": 2
}

在这里插入图片描述

📌请求体中需要使用以下json形式进行分页条件查询,其中from字段表示从第几条数据开始查询,size字段表示一页返回几条数据
📌如果想要查询指定页数的分页数据,可以通过 (页码-1)*页数算出来from字段的值

3.1.4 指定字段返回

可以通过"_source"字段指定返回结果的字段值

{
    "query": {
        "match": {
            "category": "华为"
        }
    },
    "_source": ["title","category"]
}

在这里插入图片描述

3.1.5 指定字段排序

可以通过"sort"字段指定字段进行排序及其顺序,desc降序asc升序

{
    "query": {
        "match": {
            "category": "华为"
        }
    },
    "sort": {
        "price": {
            "order": "desc"
        }
    }
}

在这里插入图片描述

3.2 多字段查询

3.2.1 and条件

must = and,转sql  ——>   where category = "华为" and price = 10999
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "category": "华为"
                    }
                },
                {
                    "match": {
                        "price": 10999
                    }
                }
            ]
        }
    }
}

3.2.2 or条件

should = or,转sql  ——>   where category = "华为" or category = "小米"
{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "category": "华为"
                    }
                },
                {
                    "match": {
                        "category": "小米"
                    }
                }
            ]
        }
    }
}

3.2.3 值范围查询

es对应英文全拼sql
gtgreater than>
gtegreater than or equal>=
ltless than<
lteless than or equal<=
以下es的json请求体转sql  ——>   where price >= 100 and price <= 4000
{
    "query": {
        "bool": {
            "filter": {
                "range": {
                    "price": {
                        "gte": 100,
                        "lte": 4000
                    }
                }
            }
        }
    }
}

3.2.4 全文检索、完全匹配

全文检索
  使用“match”进行检索的话,会将条件“卡拉米”拆成单个的字,也就是说当所有数据中category字段包含以上三个字中的任何一个查出来。
  于是下面的这个json,把category为小米的文档全查出来了。如果"category": "华米"的话将查出来所有的category包含“华“和”米”的文档都查出来,也就是说小米和华为

{
    "query": {
        "match": {
            "category": "卡拉米"
        }
    }
}

完全匹配
  如果将“match”改为“match_phrase”的话,就将是完全匹配。也就是说再使用以下json进行查询的话就会没有数据返回,除非换成“小米”或者“华为”这种全等的条件

{
    "query": {
        "match_phrase": {
            "category": "华米"
        }
    }
}

3.2.5 高亮返回

"highlight"字段,"pre_tags"和"post_tags"属性分别是高亮标签的前置标签和后置标签,将fields中指定字段的满足match的字拼接标签高亮返回

{
    "query": {
        "match": {
            "title": "华为"
        }
    },
    "highlight": {
        "pre_tags": "<font color='red'>",
        "post_tags": "</font>",
        "fields": {
            "title": {}
        }
    }
}

在这里插入图片描述

📌由于match是全文检索,所以会将match里的字拆成单独的字进行高亮标签的拼接
📌不支持数字形式的高亮返回

3.3 函数查询

下述函数查询与高亮highlight正好相反,他们只支持数字类型字段的查询

3.3.1 分组group by

terms = group by,转sql  ——>   group by price
{
    "aggs": {
        "price_groupby": {  // 自定义命名
            "terms": {
                "field": "price"
            }
        }
    }
}

📌上面不只能查出来分组统计的数量,还能查出来所有文档的详细信息,如果不想让其返回的话,可以使用上面分页的方式"size":0

3.3.2 求和sum

sum = SUM( ),转sql  ——>   select SUM(price)
{
    "aggs": {
        "sum_price": {
            "sum": {
                "field": "price"
            }
        }
    },
    "size": 0
}

3.3.3 求平均值avg

avg = AVG( ),转sql  ——>   select AVG(price)
{
    "aggs": {
        "avg_price": {
            "avg": {
                "field": "price"
            }
        }
    },
    "size": 0
}

3.3.4 最大值max

max = MAX( ),转sql  ——>   select MAX(price)
{
    "aggs": {
        "max_price": {
            "max": {
                "field": "price"
            }
        }
    },
    "size": 0
}

3.3.5 最小值min

min = MIN( ),转sql  ——>   select MIN(price)
{
    "aggs": {
        "min_price": {
            "min": {
                "field": "price"
            }
        }
    },
    "size": 0
}

3.3.6 一次返回count/max/min/avg/sum

{
    "aggs": {
        "stats_price": {
            "stats": {
                "field": "price"
            }
        }
    },
    "size": 0
}

3.3.7 去重后取总数

cardinality = distinct + COUNT( ),转sql  ——>   select distinct COUNT(price)
{
    "aggs": {
        "cardinality_price": {
            "cardinality": {
                "field": "price"
            }
        }
    },
    "size": 0
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/442130.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

金现代产品方案部部长王宁,将出席“ISIG-低代码/零代码技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;LowCode低码时代、RPA中国、AIGC开放社区&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索低…

AD1102 小封装的3.7V锂电池转干电池使用的充放电管理芯片 替代传统干电池、镍氢电池

AD1102是一款锂电池充放电管理专用芯片。充电工作时&#xff0c;可以为 3.7V锂电池进行充电&#xff0c;电流最高可配置 1A。放电工作时&#xff0c;采用开关频率1MHz同步降压转换器进行放电&#xff0c;放电电流可以达到 3A。内部集成欠压保护、短路保护、过温保 护功能。 …

算法学习06:数组模拟:单/双链表,栈和队列,单调栈/队列

算法学习06&#xff1a;数组模拟&#xff1a;单/双链表&#xff0c;栈和队列&#xff0c;单调栈/队列 文章目录 算法学习06&#xff1a;数组模拟&#xff1a;单/双链表&#xff0c;栈和队列&#xff0c;单调栈/队列前言一、链表1.单链表2.双链表 二、栈和队列1.普通栈、队列2.单…

LeetCode Python - 42.接雨水

目录 题目答案运行结果 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组…

Maven基础简介

作者简介&#xff1a; zoro-1&#xff0c;目前大二&#xff0c;正在学习Java&#xff0c;数据结构&#xff0c;spring等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; Maven简介 Maven是什么 Maven…

人工智能|机器学习——Canopy聚类算法(密度聚类)

1.简介 Canopy聚类算法是一个将对象分组到类的简单、快速、精确地方法。每个对象用多维特征空间里的一个点来表示。这个算法使用一个快速近似距离度量和两个距离阈值T1 > T2 处理。 Canopy聚类很少单独使用&#xff0c; 一般是作为k-means前不知道要指定k为何值的时候&#…

Java的Writer类详解

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

【xv6操作系统】Lec06 Isolation system call entry/exit

6.1 Trap机制 每当 1.程序执行系统调用 2.程序出现了类似page fault、运算时除以0的错误 3.一个设备触发了中断使得当前程序运行需要响应内核设备驱动 都会发生用户空间和内核空间的切换&#xff0c;通常被称为trap。trap机制要尽可能的简单。 Shell可能会执行系统调用&a…

多种方法解决Error: could not open `C:Program FilesJavajre1.8.0_311libamd64jvm.cfg‘

文章目录 1. 复现错误2. 分析错误3. 解决错误4. 补充说明1. 复现错误 今天春节后开工第一天,打开我的IDEA,却报出如下错误: 报错信息是找不到JRE,于是,通过Windows Powershell输入Java -version,如下图所示: 即Error: could not open C:\Program Files\Java\jre1.8.0_31…

外包干了5天,技术退步明显。。。。。

在湖南的一个安静角落&#xff0c;我&#xff0c;一个普通的大专生&#xff0c;开始了我的软件测试之旅。四年的外包生涯&#xff0c;让我在舒适区里逐渐失去了锐气&#xff0c;技术停滞不前&#xff0c;仿佛被时间遗忘。然而&#xff0c;生活的转机总是在不经意间降临。 与女…

7. 镜面网格

E . 镜面网格 E.镜面网格 E.镜面网格 每次测试时限&#xff1a; 2 秒 每次测试时限&#xff1a;2 秒 每次测试时限&#xff1a;2秒 每次测试的内存限制&#xff1a; 256 兆字节 每次测试的内存限制&#xff1a;256 兆字节 每次测试的内存限制&#xff1a;256兆字节 题目描述 给…

JavaScript极速入门-综合案例(3)

综合案例 猜数字 预期效果 代码实现 <button type"button" id"reset">重新开始一局游戏</button><br>请输入要猜的数字:<input type"text" id"number"><button type"button" id"button&q…

Swift SwiftUI 学习笔记 2024

Swift SwiftUI 学习笔记 2024 一、资源 视频资源 StanfordUnivercity 公开课 2023: https://cs193p.sites.stanford.edu/2023 教程 Swift 初识&#xff1a;基础语法&#xff1a;https://docs.swift.org/swift-book/documentation/the-swift-programming-language/guidedtour/…

Spring Boot搭建入门

Spring Boot简介 Spring Boot是对Spring进行的高度封装&#xff0c;是对Spring应用开发的高度简化版&#xff0c;是Spring技术栈的综合整合&#xff0c;是J2EE的一站式解决方案。想要精通Spring Boot的前提是需要熟悉Spring整套技术栈原理与内容。 Spring Boot的优点&#xf…

图机器学习(3)-面向节点的人工特征工程

0 问题引入 地铁导航图 计算机是看不懂这些图&#xff0c;计算机只能看懂向量、矩阵。 传统图机器学习只讨论连接特征。 构造一个新的特征 x 1 x 2 x_1x_2 x1​x2​&#xff0c;有利于分开这种数据。 人需要去翻译这些计算机不懂的特征&#xff0c;变成计算机可以懂…

深入理解Java的Writer类

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…

Visual Studio 2022 Version 17.9 新功能

Visual Studio 2022 v17.9 为广大 C 开发者引入了一系列好用的新功能和改进优化。 内存布局 现在&#xff0c;你可以使用【内存布局&#xff0c;Memory Layout】功能以可视化的方式来查看对象&#xff0c;结构体及联合体的内存布局信息&#xff0c;这可比以前需要手动查看内存…

RoaringBitmap 源码

当调用add方法时&#xff0c;先把x分成高16位和低16位。 ">>> "是 Java 中的无符号右移操作符&#xff0c;表示将 x 的二进制表示向右移动 16 位 当x为 65535 &#xff0c;二进制为1111111111111111&#xff0c;16个1&#xff0c;即丢掉右16位&#xff0c;左…

基于YOLOv8深度学习的智能道路裂缝检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测、目标分割

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

讲解linux下的Qt如何编译oracle的驱动库libqsqloci.so

1.需求 最近linux下的Qt项目中要连接oracle数据库&#xff0c;用户需要我们访问他们的oracle数据库&#xff0c;查询数据 2.遇到的问题 qt连接oracle数据库需要oracle的驱动库libqsqloci.so插件&#xff0c;需要编译下&#xff0c;之前没有编译过&#xff0c;看了网上的…