当前位置: 首页 > news >正文

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

一、操作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.lryc.cn/news/221113.html

相关文章:

  • 【QT】QT自定义C++类
  • 【多媒体文件格式】AVI、WAV、RIFF
  • AI创作系统ChatGPT商业运营系统源码+支持GPT4/支持ai绘画
  • JWT简介 JWT结构 JWT示例 前端添加JWT令牌功能 后端程序
  • Rust核心功能之一(所有权)
  • 跨域(CORS)和JWT 详解
  • 前端框架Vue学习 ——(二)Vue常用指令
  • Linux 指令心法(十四)`flash_erase` 擦除Flash存储器
  • GoLong的学习之路(二十一)进阶,语法之并发(go最重要的特点)(协程的主要用法)
  • 加快网站收录 3小时百度收录新站方法
  • GPT实战系列-ChatGLM3本地部署CUDA11+1080Ti+显卡24G实战方案
  • 图片怎么转换成pdf?
  • 【源码】医学影像PACS实现三维影像后处理等功能
  • DOCTYPE是什么,有何作用、 使用方式、渲染模式、严格模式和怪异模式的区别?
  • Go语言实现HTTP正向代理
  • 第11章_数据处理之增删改
  • 数据时代的新引擎:数据治理与开发,揭秘数据领域的黄金机遇!
  • 使用 Golang 实现基于时间的一次性密码 TOTP
  • 微服务之Nacos配置管理
  • PySpark 优雅的解决依赖包管理
  • UNI-APP_获取手机品牌
  • 新登录接口独立版变现宝升级版知识付费小程序-多领域素材资源知识变现营销系统
  • 「掌握创意,释放想象」——Photoshop 2023,你的无限可能!
  • SQLSugar查询返回DataTable
  • 企业微信开启接收消息+验证URL有效性
  • 电脑访问不到在同网络的手机设备
  • 国内MES系统应用研究报告:“企业MES应用现状”| 百世慧®
  • C++模板元模板实战书籍讲解第一章题目讲解
  • Java在互联网网络安全中的应用(三)
  • VMLogin如何解决跨境电商多账号管理难题?