【Elasticsearch】kibana 操作es文档详细总结

news2024/11/28 2:31:26

前言

在上一篇,分享了使用kibana如何对索引进行增删改查等操作,事实上在日常开发与运维中,操作索引毕竟是比较谨慎的事情,但是对于索引中文档的增删查改却是随处可见的,es对文档的操作不仅频繁,而且涉及到的点比较多,本文将分享对文档的基本的操作;

一、给文档添加数据

首先创建一个索引

PUT test_doc

使用 put 给文档添加一条数据

 执行上面的语句发现报错了,因为es中的文档数据需要唯一性标识,因此需要添加一个id,修改下执行语句

PUT test_doc/_doc/1001
{
  "id":1001,
  "name":"jerry",
  "age":12
}

再次执行后就可以了 

使用 post 给文档添加一条数据

使用post同样可以达到目的,参考下面的语句

POST test_doc/_doc
{
  "id":1002,
  "name":"mike",
  "age":15
}

 与put不同的是,post不需要强制在请求URL中添加id值,而是自动为当前这条数据生成一个_id;

二、查询索引文档数据

按照id值进行查询

查询单个数据

GET test_doc/_doc/1001

查询索引下所有文档数据

GET test_doc/_search

三、修改文档数据

使用put进行修改

根据主键值id进行修改

PUT test_doc/_doc/1001
{
  "id":1001,
  "name":"jerry",
  "age":12
}

可以看到在这种情况下,新增了一个字段仍然可以修改成功 

四、删除文档数据

根据主键id值进行删除

DELETE test_doc/_doc/1001

 删除后再次查询,数据被删掉了

五、文档搜索

文档搜索是es最强大的功能之一,也是架构设计之初选择es的一个重要原因,es对于文档的搜索提供了丰富的API,下面通过一些实际的操作演示来感受下es文档搜索的强大之处;

前置准备

创建一个索引 test_query,并给这个索引下批量插入一些数据

PUT test_query

PUT test_query/_bulk
{"index": {"_index": "test_query","_id": "1001"}}
{"id": "1001","name":"zhang san","age":30}
{"index": {"_index": "test_query","_id": "1002"}}
{"id": "1002","name":"li si","age": 40}
{"index": {"_index": "test_query","_id": "1003"}}
{"id": "1003", "name": "wang wu","age" : 50}
{"index": {"_index": "test_query","_id": "1004"}}
{"id": "1004","name": "zhangsan", "age" : 30}
{"index": {"_index": "test_query","_id": "1005"}}
{"id": "1005","name": "lisi","age":40}
{"index": {"_index": "test_query","_id": "1006"}}
{"id": "1006", "name ": "wangwu","age" : 50}

单个字段相关查询

1、查询某个索引下的所有数据

GET 索引名称/_search

2、使用match匹配某个字段的关键词

比如name字段中包含 zhangsan 的文档

GET test_query/_search
{
  "query": {
    "match": {
      "name": "zhangsan"
    }
  }
}

 要注意的是,这种方式查询的结果,表示name 中只要包含了zhangsan这个完整的关键词的文档都会查询出来,因为默认情况下,如果我们未对索引中的字段进行属性映射文件的设置的话,es会对字段进行分词处理;

比如我们再增加下面这条数据

POST test_query/_doc
{
  "id":"1007",
  "name":"zhang wu",
  "age":37
}

再次使用 zhang 这个关键词进行name字段查询时,可以看到下面的效果,简而言之:使用match查询时会带有分词效果;

3、使用term精确匹配某个字段的关键词

精准匹配name等于zhangsan这个词的文档,term的效果就像mysql语法中的 where name="XXX"

GET test_query/_search
{
  "query": {
    "term": {
      "name": {
        "value": "zhangsan"
      }
    }
  }
}

4、查询结果中过滤某些不需要的字段

某些情况下,不需要查询结果中返回所有的字段,就可以通过添加"_source"进行限制

GET test_query/_search
{
  "_source": ["name","age"], 
  
  "query": {
    "match": {
      "name": "zhang"
    }
  }
}

多条件组合查询

组合查询的关键语法是需要在查询条件中使用bool关键字

1、查询name中含有zhang或age为40的数据

这个需求类似于mysql 中的or的语法,在es中使用should可以满足类似的需求

GET test_query/_search
{
  "query": {
    "bool": {
      "should": [
        [
          {
            "match":{
              "name":"zhang"
            }
          },
          {
            "match":{
              "age":40
            }
          }
        ]
      ]
    }
  }
}

2、查询文档中name中必须含有zhang或者age必须大于等于30岁的数据

组合使用should和must

GET test_query/_search
{
  "query": {
    "bool": {
      "must": [
        [
          {
            "match":{
              "name":"zhang"
            }
          }
        ]
      ],
      
      "should": [
        {
          "range": {
            "age": {
              "gte": 30
            }
          }
        }
      ]
    }
  }
}

查询结果排序

查询name中含有 zhang或li的文档,并按照age排序

GET test_query/_search
{
  
  "query": {
    "match": {
      "name": "zhang"
    }
  },
  "sort":[
    {
      "age" : {
        "order":"desc"
      }
    }
  ]
}

分页查询

语法

GET 索引名称/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,        //从第几条开始查询
  "size": 2         //每次查询多少数据
}

看下面的查询结果

GET test_query/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 2
}

聚合查询

实际业务中,经常会涉及到对查询的结果根据某个或者某些字段进行聚合,类似于mysql中的group by语法;

需求1:根据age将查询结果进行分组聚合

 注意点:这里 "size"设置为0表示查询结果中不展示其他非聚合结果的信息;

GET test_query/_search
{
 
  "aggs": {
    "aggAge": {
      "terms": {
        "field": "age"
      }
    }
  },
 
  "size": 0
}

需求2:查询年龄大于等于40岁的,并将结果按照age分组聚合

GET test_query/_search
{
 
 "query": {
   "range": {
     "age": {
       "gte": 40
     }
   }
 }, 
 
  "aggs": {
    "aggAge": {
      "terms": {
        "field": "age"
      }
    }
  },
 
  "size": 0
}

查询结果如下

 需求3:根据age分组聚合,再对聚合后的结果按照age求平均值

GET test_query/_search
{
  "aggs": {
    "ageAgg": {
      "terms": {
        "field": "age"
      },
      
      "aggs": {
        "avgAgg": {
          "avg": {
            "field": "age"
          }
        }
      }
      
    }
  },
  "size": 0
}

查询结果如下

 需求4:获取结果集中的前N个数据

GET test_query/_search
{
  "aggs": {
    "top3": {
      "top_hits": {
        "size": 3
      }
    }
  },
  "size": 0
}

查询结果如下

 需求5:获取结果集中按照age字段排序后求取前N个数据

GET test_query/_search
{
  "aggs": {
    "top3": {
      "top_hits": {
        "sort": [
          {
          "age" : {
              "order":"desc"
            }
          }
        ], 
        "size": 3
      }
    }
  },
  "size": 0
}

查询结果如下

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML+CSS一个简单的电影网页制作作业,学生个人html静态网页制作成品代码, html电影速递网

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 文章目录一、网页介绍一…

细说react源码中的合成事件

💕 温馨提示: 下边是对React合成事件的源码阅读,全文有点长,但是!如果你真的想知道这不为人知的背后内幕,那一定要耐心看下去! 最近在做一个功能,然后不小心踩到了 React 合成事件 的坑&#xf…

【 web网页设计期末课程大作业】基于HTML+CSS+JavaScript智慧路灯综合管理系统

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

(附源码)计算机毕业设计Java宠物销售管理系统

项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis Maven Vue 等等组成,B/…

PGL图学习之基于GNN模型新冠疫苗任务[系列九]

PGL图学习之基于GNN模型新冠疫苗任务[系列九] 项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5123296?contributionType1 # 加载一些需要用到的模块,设置随机数 import json import random import numpy as np import pandas as pdimp…

叠氮荧光染料:Azide-FL-BDP|1379771-95-5|BDP FL N3叠氮

BDP FL叠氮化物是一种类似于BODIPY FL叠氮化物的荧光染料,是一种具有点击化学性质的荧光染料。该荧光团是硼二吡咯甲基类荧光染料的代表,在水环境中具有较高的量子产率。azide系列产品包括可用于进一步连接的azide-acid;azide-amine&#xff…

CDGA|促进数据生产要素在大湾区自由流动,培养数据治理人才先行

在数字经济时代,数据已经成为社会经济发展的关键要素,是世界各国竞相争夺的基础性战略资源。 探究如何在掌握数字经济自主权基础上优化跨境数据流动的路径,需要考虑平衡跨境数据流动所引起的数据主权、数据保护和数据自由流动的利益冲突&…

李铁不用归化球员的真正原因 #小姐姐爱体育#第9部

中国自古以来是人情社会,不论走到哪里都要讲关系,只要你有足够铁的关系,就没有办不了的事情。不过对于中国男足前教练来说,虽然他的名字叫作李铁,但是办的事情却不是关系很铁的所作所为。 在李铁上任国家队总教练之前&…

【学习笔记51】ES6的新增属性Set和Map

一、Set set类似于数组的一种数据结构,内部按照索引排序(但是不能通过索引取值)语法:let s new Set([数据1, 数据2, 数据3])特点: 天生不支持重复数据 let arr [1, 2, 2, 3, 4, 4, 4, 3];let s new Set(arr);console.log(原数组:,arr);con…

为什么要申请实用新型专利呢?

问题一:实用新型专利从申请到拿证需要多长时间? 有三种申请通道。 1、普通申请通道:通常4-6个月就能获得授权; 2、优先审查通道:通常2-6个月就能拿证; 3、快速预审通道:通常不超过7个工作日…

万字详解数据结构——树

数据结构——树 🏖️专题:数据结构 🙈作者:暴躁小程序猿 ⛺简介:双非本科大二小菜鸡一枚,希望和大家一同进步~ 树知识点目录数据结构——树一、二叉树1.树概念及结构1.1树的概念1.2 树的相关概念1.3 树的表…

数学建模论文六大获奖技巧总结(想得奖的进来看)

目录 一,摘要一定要认真写 二,论文的排版一定要美观 三,模型假设一定要认真对待 ●模型假设的意义 四,问题分析推荐使用流程图 五,推荐使用改进或优化后的模型 六,建议增加模型检验模块 一&#xff0…

什么是Java运算?Java运算好学吗?

提到运算,你可能会立即想到加、减、乘、除四则运算以及“九九乘法表”。Java 语言中有很多进行数据运算的方式,比如:算术运算、比较运算、逻辑运算、赋值运算、三目运算等。每一种运算方式,又都包含了很多的运算符,小编…

【American English】美语口语,浊化,弱读,连读,省音

1【American English】美式发音,英语发音,美国音音标列表及发音2【American English】美语的连读规则3【American English】美语口语中常见的 Gonna、wanna、gotta 含义及用法4【American English】美语口语,浊化,弱读&#xff0c…

单片机---1MHz方波的产生(中断和查询方式)

单片机—定时/计数器方式产生1MHz方波 要求: 使用定时器1,采用工作方式1,在输出口P2.0产生周期未1秒的方波; 定时计数基本流程 计算初值定义TMOD寄存器确定 T0 或 T1 为工作方式把计数器初值装入 THx 和 TLx (x0,1与上面确定的T0,T1保持一…

Git Hooks简介及结合Husky和Commitlint检测提交代码规范

文章目录一、Git Hooks1.1 目标1.2 常用hooks1.3 核心钩子二、Commitlint2.1 安装2.2 创建配置文件三、Husky3.1 安装3.2 启动3.3 生成指令并执行3.4 通过commit-msg规范化提交信息3.5 通过pre-commit检测提交代码规范四、验证测试4.1 验证提交规范4.2 验证代码规范五、再进一步…

产品经理撰写需求文档

众所周知,需求文档的撰写是每位产品经理工作中必备的技能。 PRD文档没有标准的规范,也没有统一的模板,每个公司都不一样,并且每个人也不一样,这个取决于个人习惯和团队要求。 接下来主要讲作为一个入门的产品经理&…

使用小程序实现AI动漫脸特效

文章目录一、文章前言二、具体流程及准备三、开发步骤四、完整代码一、文章前言 最近在Dou音很火的AI绘画特效能够实现将人脸进行动漫化,让我们用小程序也制作一个吧。 二、具体流程及准备 2.1、注册百度开放平台及微信公众平台账号。 2.2、下载及安装微信Web开发者…

代码源每日一题div1 平方计数

平方计数 - 题目 - Daimayuan Online Judge 题意: 思路: 首先注意到暴力枚举一定超时,因此我们考虑只枚举一个指针,然后推一推式子降低另一个指针的复杂度 对于完全平方数这个条件,我们无法直接转换 即对于每一个a[…

sCrypt 合约中的椭圆曲线算法:第一部分

我们提出了一种新颖有效的方法,用于在脚本中计算椭圆曲线上的点加法和标量乘法。对于点加法,我们将超过 1MB 的脚本大小减少到约 400 字节。 椭圆曲线点加法 对于每个 i,每个点 Pi 由两个坐标 (xi, yi) 表示。要计算 P3 P1 P2,…