总结Kibana DevTools如何操作elasticsearch的常用语句

news2024/11/28 12:56:01

一、操作es的工具

  • ElasticSearch Head
  • Kibana DevTools
  • ElasticHQ

本文主要是总结Kibana DevTools操作es的语句。

二、搜索文档

1、根据ID查询单个记录

GET /course_idx/_doc/course:20

在这里插入图片描述

2、term

匹配"name"字段的值为"6789999"的文档

  • 类似于sql语句中的等于==,属于精准匹配
GET /course_idx/_search
{
  "query":{
    "term": {
      "name": "6789999"
    }
  }
}

3、terms

匹配课程编号包含"C00B5230920105650700A1"、"C00B5230921171813401A8"中任意一个值的文档。

  • 类似于in集合查询

GET course_idx/_doc/_search
{
    "query" : {
        "terms" : {
            "courseNo" : [
              "C00B5230920105650700A1",
              "C00B5230921171813401A8"
          ],
          "boost" : 1.0
        }
    }
}

  • 返回内容
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "course_idx",
        "_type" : "_doc",
        "_id" : "course:23",
        "_score" : 1.0,
        "_source" : {
          "id" : "course:23",
          "courseType" : 0,
          "courseNo" : "C00B5230921171813401A8",
          // 省略其他字段
        }
      },
      {
        "_index" : "course_idx",
        "_type" : "_doc",
        "_id" : "course:7",
        "_score" : 1.0,
        "_source" : {
          "id" : "course:7",
          "courseType" : 0,
          "courseNo" : "C00B5230920105650700A1",
          // 省略其他字段
        }
      }
    ]
  }
}

4、match

用于在文本字段中执行全文搜索,可以模糊匹配文本。它会分析文本,将其分成词汇,并搜索匹配的词汇。

GET /course_idx/_search
{
  "query": {
    "match": {
      "name": "课"
    }
  }
}

5、multi_match

用于在多个字段上执行全文搜索。你可以指定多个字段,并搜索它们中的匹配项。

  • 字段name或者courseNo检索匹配"课"字的记录
GET /course_idx/_search
{
  "query": {
    "multi_match": {
      "query": "课",
      "fields": ["name", "courseNo"]
    }
  }
}

6、bool

  • must(必须匹配)

查询courseNo=‘C005230922B133545556M4’ and useCount=0的记录

  • 相当于sql中的and
GET /course_idx/_search
{
  "query": {
    "bool": {
      "must": [
        { "term": { "courseNo": "C005230922B133545556M4" } },
        { "term": { "useCount": "0" } }
      ]
    }
  }
}
  • should(可以匹配,比must的强制性小得多)

查询courseNo=‘C005230922B133545556M4’ or useCount=5的记录

  • 相当于sql中的or
GET /course_idx/_search
{
  "query": {
    "bool": {
      "should": [
        { "term": { "courseNo": "C005230922B133545556M4" } },
        { "term": { "useCount": "5" } }
      ]
    }
  }
}
  • 查询结果,匹配到了3条记录,第一条记录满足第一个条件,第二三条记录满足第二个条件。
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 3,
    "max_score" : 5.0834727,
    "hits" : [
      {
        "_index" : "course_idx",
        "_type" : "_doc",
        "_id" : "course:35",
        "_score" : 5.0834727,
        "_source" : {
          "id" : "course:35",
          "courseType" : 0,
          "courseNo" : "C005230922B133545556M4",
          "useCount" : 0
        }
      },
      {
        "_index" : "course_idx",
        "_type" : "_doc",
        "_id" : "lecture:942",
        "_score" : 1.0,
        "_source" : {
          "id" : "lecture:942",
          "courseType" : 2,
          "courseNo" : "L005231012B1421252702M5",
          "useCount" : 5
        }
      },
      {
        "_index" : "course_idx",
        "_type" : "_doc",
        "_id" : "lecture:943",
        "_score" : 1.0,
        "_source" : {
          "id" : "lecture:943",
          "courseType" : 2,
          "courseNo" : "L005231012142125B2703M4",
          "useCount" : 5
        }
      }
    ]
  }
}

  • must_not(不匹配)

对must的取反操作,它是一个逻辑非运算。

  • 类似于sql 中的 !=
GET /course_idx/_search
{
  "query": {
    "bool": {
      "must_not": [
        { "term": { "courseNo": "C005230922B133545556M4" } }
      ]
    }
  }
}

7、wildcard

允许使用通配符进行模糊匹配。

  • 星号* :星号用于匹配零个或多个字符。例如,app* 将匹配任何以"app"开头的词汇,例如"apple"、"application"等。

  • 问号?:问号用于匹配一个单一字符。例如,te?t 将匹配"test"、“text"等,但不会匹配"tent”,因为它包含了两个不同的字符。

GET /course_idx/_search
{
  "query": {
    "wildcard": {
      "name.keyword": "22*"
    }
  }
}
  • 返回报文
{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 31,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "course_idx",
        "_type" : "_doc",
        "_id" : "lecture:184",
        "_score" : 1.0,
        "_source" : {
          "id" : "lecture:184",
          "courseType" : 2,
          "courseNo" : "L005B2310111036451771M7",
          "creatorId" : 155954,
          "name" : "22"
        }
      },
      {
        "_index" : "course_idx",
        "_type" : "_doc",
        "_id" : "lecture:211",
        "_score" : 1.0,
        "_source" : {
          "id" : "lecture:211",
          "courseType" : 2,
          "courseNo" : "L005B2310111052501806M4",
          "creatorId" : 155954,
          "name" : "222"
        }
      },
      {
        "_index" : "course_idx",
        "_type" : "_doc",
        "_id" : "lecture:557",
        "_score" : 1.0,
        "_source" : {
          "id" : "lecture:557",
          "courseType" : 2,
          "courseNo" : "L0B052310111423472182M8",
          "creatorId" : 155954,
          "name" : "22222"
        }
      }
    ]
  }
}

8、prefix

用于匹配字段的前缀

  • 类似于sql中的 like ‘22%’
GET /course_idx/_search
{
  "query": {
    "prefix": {
      "name": "22"
    }
  }
}

9、fuzzy

模糊查询name名称字段中包含"课"字的记录。

  • 依赖于分词器
GET /course_idx/_search
{
  "query": {
    "fuzzy": {
      "name": "课"
    }
  }
}
  • fuzzy查询还允许你配置其他选项,如模糊度、前缀长度和最大扩展数,以控制查询的模糊度和性能。

三、更新文档

POST /course_idx/_doc/course:20
{
  "doc": {
    "name": "6789"
  }
}

// 修改成功!!
{
  "_index" : "course_idx",
  "_type" : "_doc",
  "_id" : "course:20",
  "_version" : 14,
  "result" : "updated",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 11960,
  "_primary_term" : 1
}
  • 再次查询,发现文档的name内容是更新了,但是文档的字段也只剩下name了。

在这里插入图片描述
所以,在使用本操作语句的时候,需要特别注意这一点。

四、删除文档

DELETE /course_idx/_doc/course:20

在这里插入图片描述

五、索引

1、创建索引

这里只列举出几个字段,并不是全部字段的定义。

PUT /course_idx
{
    "mappings":{
        "_doc":{
            "properties":{
                "courseType":{
                    "type":"integer"
                },
                "creatorId":{
                    "type":"long"
                },
                "courseNo":{
                    "type":"keyword"
                },
                "name":{
                    "type":"text",
                    "fields":{
                        "keyword":{
                            "ignore_above":256,
                            "type":"keyword"
                        }
                    }
                },
                "id":{
                    "type":"keyword"
                }
            }
        }
    }
}

2、删除索引

谨慎操作,这个会删除掉所有数据及结构。

DELETE /course_idx

六、聚合查询

1、计数

GET /course_idx/_count

// 总记录数是1153条
{
  "count" : 1153,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  }
}

2、平均值

统计字段useCount-使用次数的平均数

GET /course_idx/_search
{
  "aggs": {
    "avg_useCount": {
      "avg": {
        "field": "useCount"
      }
    }
  }
}

在这里插入图片描述

3、汇总

使用次数的汇总

GET /course_idx/_search
{
  "aggs": {
    "total_useCount": {
      "sum": {
        "field": "useCount"
      }
    }
  }
}

在这里插入图片描述

4、bucket桶查询

使用次数的桶统计

GET /course_idx/_search
{
  "aggs": {
    "useCount_ranges": {
      "range": {
        "field": "useCount",
        "ranges": [
          { "from": 0, "to": 5 },
          { "from": 5, "to": 10 },
          { "from": 10, "to": 100 }
        ]
      }
    }
  }
}

在这里插入图片描述

5、最大/小值

求最大使用次数和最小使用次数。

GET /course_idx/_search
{
  "aggs": {
    "max_useCount": {
      "max": {
        "field": "useCount"
      }
    },
    "min_useCount": {
      "min": {
        "field": "useCount"
      }
    }
  }
}

在这里插入图片描述

6、日期直方图

按天的直方图,统计每天的文档数量

GET /course_idx/_search
{
  "aggs": {
    "date_histogram": {
      "date_histogram": {
        "field": "createdDate",
        "interval": "day"
      }
    }
 }
}

在这里插入图片描述

七、分词器

es默认的分词器是standard。
下面以“数学的课程库”三个字为示例,看下分词结果。

GET /_analyze
{
  "analyzer": "standard",
  "text": "数学的课程库"
}


GET /_analyze
{
  "text": "数学的课程库"
}

结果都是“数”“学”“的”“课”“程”“库”。

想要更好的支持中文分词,一般的建议是按照ik分词器。
如果想要进一步自定义分词,需要编写你自己的dict文本。

  • 建议在安装es的时候,就把需用的分词器安装OK
  • 第二步在建立es索引的时候,指定具体字段使用什么分词器(否则它将使用对中文不是很友好的标准分词器)

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

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

相关文章

自查看看自己转本复习中存在哪些问题

缺乏清晰、强力的奋斗目标 “我想考本科”只不过是一种笼统的泛化的模糊的专转本目标,对潜意识学习潜能的刺激力度不大。 专转本备考中,更需要一个恒久、量化、清晰、明确、具体的目标牵引自我潜意识去努力,克服学习中的重重困难。比如一所…

软件测试丨从外包到自研再到大厂——我是怎么从6k到25k的

功能测试:理论上说,该定位的测试人员应该是对业务需求理解最透彻的群体,专注于用户角度的测试,组织整体质量实践,分析测试运行结果,驱动测试执行。当然除了业务技能过硬,常用的测试工具也是必须…

VMware安装CentOS最小化开发环境导引

目录 一、概要 二、介绍 三、下载 四、安装 4.1 创建虚拟机 4.2 安装CentOS 五、配置网卡 六、配置本地安装源 七、安装软件 7.1 gcc/g 7.2 C的atomic库 7.3 java 7.4 Cmake 7.5 MariaDB客户端(兼容mysql) 八、用户配置文件.bash_profile…

Python小试牛刀:GUI(图形界面)实现计算器UI界面(三)

上一篇:Python小试牛刀:GUI(图形界面)实现计算器UI界面(二)-CSDN博客 回顾前两篇文章,第一篇文章主要实现了计算器UI界面如何布局,以及简单概述Python常用的GUI库。第二篇文章主要实现了计算器UI界面按钮组…

shiro-cve2016-4437漏洞复现

一、漏洞特征 Apache Shiro是一款开源强大且易用的Java安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。 因为在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题 在 1.2.4 版本前, 加…

Disk Drill v5.3.1313(数据恢复备份)

Disk Drill是一款功能强大的数据恢复软件,它可以帮助用户恢复已删除、丢失、格式化或损坏的文件,并支持多种存储设备,包括计算机硬盘驱动器、外部硬盘、USB闪存驱动器、内存卡和其他存储介质。它和很多的文件系统都兼容,比如&…

如何快速搭建本地书库结合内网穿透实现公网随时远程访问

Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说! 文章目录 Kindle中国电子书店停运不要慌,十分钟搭建自己的在线书库随时随地看小说!1.网络书库软件下载安装2.网络书库服务器设置3.内网穿透工具设置4.公网…

高压放大器在微机电工程中有哪些应用

高压放大器在微机电工程中有许多重要的应用。微机电工程是一种利用微电子加工技术制造微米级或纳米级机械结构并与电子元件集成的领域。高压放大器在MEMS领域发挥着关键的作用,下面将介绍几个高压放大器在MEMS工程中的应用。 MEMS驱动器:MEMS驱动器常用于…

CLIP Surgery论文阅读

CLIP Surgery for Better Explainability with Enhancement in Open-Vocabulary Tasks(CVPR2023) M norm ⁡ ( resize ⁡ ( reshape ⁡ ( F i ˉ ∥ F i ‾ ∥ 2 ⋅ ( F t ∥ F t ‾ ∥ 2 ) ⊤ ) ) ) M\operatorname{norm}\left(\operatorname{resize}\…

Linux认识协议

目录 TCP协议通信流程TCP三次握手数据传输过程四次挥手过程TCP 和 UDP 对比 认识协议协议的概念结构化数据的传输序列化和反序列化 网络版计算器服务端代码面向字节流 协议定制客户端代码编写代码测试守护进程守护进程创建 关于协议制定中使用现成方法实现 TCP协议通信流程 下…

华为H12-831题库

单选)当IS-IS网络中有多条冗余链路时,可能会出现多条等价路由。关于IS-IS网络内的等价路由,以下哪个描述是错误的? A、当组网中存在的等价路由数量大于通过命令配置的数量,且这些路由优先级相同时,优选下一跳设备Sys…

三、机器学习基础知识:Python常用机器学习库(SKlearn)

文章目录 1、Scikit learn简介2、主要步骤3、数据预处理4、模型选择与算法评价 1、Scikit learn简介 Scikit learn 的简称是 SKlearn,专门提供了 Python 中实现机器学习的模块。Sklearn 是一个简单高效的数据分析算法工具,建立在 NumPy、SciPy和 Matplo…

深入研究Android内存

深入研究Android内存 Android应用程序开发时,我们始终意识到自己是Android硬件和操作系统的一部分。 从硬件角度来看,我们可以将Android手机分为不同级别。基本上,我们可以将它们分类为适用于低端硬件或API的入门级、中级和高级硬件-API手机…

Python+Selenium WebUI自动化框架 -- 基础操作封装

前言: 封装Selenium基本操作,让所有页面操作一键调用,让UI自动化框架脱离高成本、低效率时代,将用例的重用性贯彻到极致,让烦人的PO模型变得无所谓,让一个测试小白都能编写并实现自动化。 知识储备前提&a…

WordPress自适应图片主题源码CX-UDY主题模板 带会员积分下载系统

说明:该主题只适用于WordPress 4.8及以下版本,高版本暂不支持,介意的请勿下! 下载地址 qnziyw点cn/cmsmb/wordpress/8084点html

Flutter:安装依赖报错doesn‘t support null safety

项目中需要引用http依赖,在pubspec.yaml文件中添加如下信息: 当同步时,报错信息如下: [myflutter] flutter pub upgrade Resolving dependencies... The current Dart SDK version is 3.1.3. Because myflutter depends on http &…

超简单的Mac双开微信,升级后失败重复操作仍然有效

首先找到安装的微信 应用程序 -> 微信 右键 -> 复制 复制出来效果如下: 在复制出来的微信应用右键-> 点击显示包内容 但是每次打开微信都特别麻烦,这里选择脚本右键制作替身,最后多出来的替身图标,拖拽到桌面就可以了…

6.数据类型与运算符

目录 mysql数据类型 整型数据类型 浮点数类型和定点数类型 1、日期时间类型 1、YEAR 2、TIME 3、DATE类型 4、DATETIME 5、TIMESTAMP 2、字符串类型 1、CHAR 和 VARCHAR类型: 2、TEXT类型 3、ENUM类型 4、SET类型 二进制字符串类型 1、BIT类型 2、…

Java学习 7.Java-方法的使用

一、为什么要使用方法 在编程中,某段功能的代码可能频繁使用,如果在某个位置重新实现一遍,会: 1.使程序变得繁琐 2.开发效率底下,做了大量重复性工作 3.不利于维护,需要改动时,所有用到该段…