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

Elastic stack 技术栈学习(七)—— kibana中索引的基本操作(创建、删除、更新、查看)以及文档的基本操作

目录

一、Restful风格

二、关于索引的基本操作

1. 创建

(1)创建索引

(2)创建索引规则

2.GET获取信息

(1)获得索引信息

(2)获得文档信息

(3)补充常用命令 GET _cat/... 获取es集群的信息

​ 3. 使用POST命令更新文档

4. 删除

(1)删除索引

(2)删除索引中的某个文档

三、关于文档的基本操作

1、PUT/POST创建文档

2、GET获取文档

3、POST更新文档

4、简单的搜索

(1) 在索引中根据关键字搜索文档

5、复杂搜索

(1)模糊查询

(2)过滤不想看的字段

(3)排序

(4)分页查询

(5)布尔值bool查询

(6)模糊查询的多条件查询

(7)term精确查询

(8)精确查询的多条件查询

(9)高亮查询 及 自定义高亮样式


一、Restful风格

restful风格就是一种“约定”,因为很好用,所以变成了一种开发规范

1)他的核心思想是,既然HTTP协议定义的请求行里的命令字段(POST、GET、DETELE)这么好用,那我直接把他的思想拿来开发应用接口呀,也就是在开发接口的时候,把HTTP动词独立出来。

2)核心思想二:将系统中的任何信息(用户、订单、图片等)抽象为资源,每个资源都拥有自己的 URL,比如/clothes/{id},/clothes/478553 表示访问优衣库id=478553 的衣服。比如书的资源id用/books/{id}表示,/books/30表示访问id为30的书。如果你想找作者是“天下霸唱”的书,那作者名可不是资源的id,没有作者相关的url,就只能用参数的形式访问了,/books?author=天下霸唱

3)之前理解的一个误区:并不是通过url里是“/user/1/”还是"user?id=1"去判断是否是restful风格。restful风格对url的格式并没有定义,这两种url都可以有,也就是说用@RequestParam(@RequestBody)注解和@Pathvariable注解的都可以是restful风格

在kibana的创建索引、修改索引、删除索引等操作时,要严格遵循上面url地址的各个字段

二、关于索引的基本操作

1. 创建

(1)创建索引

找到Dev tool(开发工具),左栏就是发送JSON格式的命令的,点击绿色的三角形发送命令,右栏是返回结果。

PS:对于kibana7.0以后的版本,索引的type字段被省略掉了,或者说默认是_doc类型。上面的命令可以改成

POST /test1/zxf POST /test1/_doc/zxf

然后,在head里查看一下

(2)创建索引规则

PUT /test2 { "mappings":{ "properties": { "name":{ "type":"text" }, "age":{ "type":"long" }, "sex":{ "type":"text" } } } }

在head里查看一下,test2这个索引里没有文档,是空的。

2.GET获取信息

(1)获得索引信息

获取索引信息,我们在创建test1时没有指明文档内各个字段的类型,创建test2时,通过规则指定了文档内各个字段的类型(long,text,text)。分别获取看一下区别。

① test2:创建时指定了各个字段的类型。自然返回的结果和我们在上文规定的一样。

② test1:创建时没有指明各个字段的类型。从返回的结果可以看出,es默认识别出并赋予了"name""year"等字段的类型

(2)获得文档信息

GET不仅可以获取索引信息,还可以具体到索引中每个文档的信息。

这里的文档类型type1写成_doc就行。

(3)补充常用命令GET _cat/...获取es集群的信息

查看集群的健康值:

GET _cat/health

查看es包含的所有索引的信息:

GET _cat/indices?v


3. 使用POST命令更新文档

POST test1/_doc/zxf/_update { "doc":{ "name":"修改后的name" } }

提交后,返回的结果可以看出修改成功。

然后去head里面确认一下

4. 删除

(1)删除索引

DELETE test2

回到head确认一下,test2这个索引不在了。

当然,除了在kibana中通过发送json命令的形式删除索引,在head中也可以手动删除,操作如下

(2)删除索引中的某个文档

DELETE test1/_doc/zxf

回到head确认一下,文档没有了

三、关于文档的基本操作

1、PUT/POST创建文档

前面创建索引的时候已经顺便讲过了如何创建文档,比如

PUT test1/_doc/zxf { "name":"zxf", "year":2022, "month":1, "date":25 } PUT test1/_doc/wanna_sleep { "name":"wanna sleep", "year":2022, "month":1, "date":25 }

2、GET获取文档

GET test1/_doc/morning

3、POST更新文档

同上文,

POST test1/_doc/zxf/_update { "doc":{ "name":"修改后的name" } }

4、简单的搜索

(1) 在索引中根据关键字搜索文档

# 搜索类型为type1的索引test1中,name字段值为zxf的文档 GET test1/type1/_search?q=name:zxf

# 搜索类型为type1的索引test1中,year字段值为2022的文档 GET test1/type1/_search?q=year:2022

这里存在一个问题, 如果没有给es安装分析器插件的话,就不能实现部分匹配,比如说通过name字段搜索,必须在命令中给出完整name才能匹配到。 为了实现部分匹配,我决定安装一个分词器。

elastic stack技术栈学习(八)—— 安装elasticsearch IK分词器(一个插件)_玛丽莲茼蒿的博客-CSDN博客

安装完毕后可以实现部分匹配了。

需要注意的是,部分匹配是根据字典进行拆分的,默认的英文字典有一些“呆板”,还无法实现像百度、谷歌那样的部分匹配。比如上面的查询我不用wanna,而是只输入wann,是查不到的,除非手动将wann加入字典。

我又添加了如下两个中文name字段用来测试分词器。

通过匹配的结果可以看出来,分词器既拆分了我们输入的关键字,也拆分了被查询的name字段。

5、复杂搜索

(1)模糊查询

和MySQL一样,es使用query进行查询。elastic stack提供了很多匹配方式的API。

match是模糊查询:输入“敬业福”,相当于SQL语句的 WHERE name LIKE '%敬业福%' OR LIKE '%敬业%' OR LIKE '敬' OR LIKE '业' OR LIKE '业'(和SQL不同的是,es的模糊查询会分词)

term是精确查询:输入“我想要敬业福”,相当于SQL语句的 WHERE name = '我想要敬业福'

我们先采用match模糊查询方式去匹配:

GET test1/type1/_search { "query":{ "match": { "name": "福" } } }

(2)过滤不想看的字段

如果我们只想看查询结果的name字段和year字段,不想看其他month、date字段,可以使用过滤器

GET test1/type1/_search { "query":{ "match": { "name": "福" } }, "_source":["name","year"] }

(3)排序

为了测试,索引test1的文档更改如下:

实现先按照月份再按照日期的倒序排序:

GET test1/type1/_search { "query":{ "match": { "name": "福" } }, "sort":[ { "month":{ "order":"desc" # 升序是"asc" }, "date":{ "order":"desc" } } ] }

(4)分页查询

下面是百度的分页:

GET test1/type1/_search { "query":{ "match": { "name": "福" } }, "_source":["name","month"], "sort":[ { "month":{ "order":"desc" } } ], "from":0, "size":3 }

注意,返回的查询结果下标从0开始。

(5)布尔值bool查询

1) must关键字:实现的是“逻辑与” AND

2)should关键字:实现的是“逻辑或”OR

3)must_not关键字:实现的是“逻辑非”NOT,name字段不带“福”字的文档被查询出来了。

4)过滤器

GET test1/type1/_search { "query":{ "bool": { "must": [ { "match": { "name": "福" } } ], "filter": [ { "range": { "month": { "gte": 3, "lte": 4 } } } ] } } }

(6)模糊查询的多条件查询

多个条件直接用“空格”隔开,这一点比MySQL数据库查询方便得多。

GET test1/type1/_search { "query":{ "match": { "name": "福 敬业 wanna" } } }

(7)term精确查询

先看模糊查询的结果

精确查询,没查到。必须要输入完整的“我想要敬业福”才能匹配到(相当于SQL中的 WHERE name = '我想要敬业福')

(8)精确查询的多条件查询

模糊查询的多条件查询直接用“空格”隔开就行了,但是精确查询不能直接用空格隔开。

GET test1/type1/_search { "query":{ "bool": { "must": [ { "term": { "month": 4 } }, { "term": { "date": 1 } } ] } } }

(9)高亮查询 及 自定义高亮样式

通过增加前标签和后标签自定义高亮的颜色等样式:

GET test1/type1/_search { "query":{ "match": { "name": "敬业福" } }, "highlight":{ "pre_tags": "<p class='key' style='color:red'>", "post_tags": "</p>", "fields": { "name": {} } } }

http://www.jsqmd.com/news/881275/

相关文章:

  • vue-axios-github实战:从零开始掌握前端登录拦截与路由守卫核心技术
  • 2024火狐Burp证书配置失效原因与NSS信任链修复指南
  • 【表达式】JAVA解析数学表达式 parsii 计算数学公式 表达式规则引擎 动态脚本语言
  • 鬼泣5附历代合集(内附绅士mod)2026最新官方正版免费下载 一键转存 永久更新 (看到速转存 资源随时走丢)
  • FCEUX终极指南:如何用NES模拟器重温经典并深入调试
  • ARM SME架构下BFloat16矩阵运算优化实践
  • Unity 2022+ 接入Tap广告联盟SDK避坑指南:从Gradle配置到实机测试全流程
  • 电子信息工程专业打工人的蓝桥杯嵌入式竞赛时记
  • 从安装到精通:BetterTweetDeck完整使用手册(2023最新版)
  • 网盘下载加速神器LinkSwift:告别龟速下载的5分钟完整指南
  • vczh_toys Linq库进阶:复杂数据处理的8个实用案例指南
  • 别再等电池报废!用Python+Sklearn,仅需100次循环数据就能预测电池寿命(附完整代码)
  • ComfyUI终极UI增强指南:7个免费工具让你的AI绘画效率翻倍
  • 可视化数据集构建指南:从概念到实践,驱动图表智能生成与理解
  • gcvis高级功能:自定义图表、数据导出与API集成终极指南
  • wolkenkit数据存储配置:PostgreSQL、MySQL、MongoDB实战指南
  • Unity 2022 LTS + Photon Fusion 2:手把手教你搭建第一个多人联机Demo(含完整代码)
  • 时间序列预测实战:从LightGBM到GNN与强化学习的算法选型指南
  • 海尔智能家居设备接入HomeAssistant:打造一体化智能家居控制中心
  • 机器学习解码结直肠癌基因协同作用:从WNT通路到联合治疗新靶点
  • 2026年4月头部火锅品牌推荐,地摊火锅/重庆火锅/成都火锅/社区火锅/牛肉火锅/美食/附近火锅,火锅品牌推荐 - 品牌推荐师
  • 如何为Tesla-Menu添加自定义覆盖?终极开发者入门指南
  • 融合物理与AI:基于DtN映射与FEM的椭圆型PDE反问题自监督求解框架
  • 告别音乐平台切换:开源音源聚合方案如何重塑你的听歌体验
  • 从零构建智能对话工作流:SillyTavern脚本系统的深度应用指南
  • JoyCon-Driver 多控制器管理:同时连接4个 JoyCons 的配置指南
  • Unity Android构建报错SDK version is 0的根因与精准修复
  • 2026年4月市面上靠谱的udb测试直销厂家推荐,疲劳曲线测试/压铸件模流分析,udb测试直销厂家推荐 - 品牌推荐师
  • ImageSearch部署指南:从开发环境到生产环境的完整迁移策略
  • OpenPilot深度部署指南:从架构解析到生产级调优