—— 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模糊查询的多条件查询7term精确查询8精确查询的多条件查询9高亮查询 及 自定义高亮样式一、Restful风格restful风格就是一种“约定”因为很好用所以变成了一种开发规范。1他的核心思想是既然HTTP协议定义的请求行里的命令字段POST、GET、DETELE这么好用那我直接把他的思想拿来开发应用接口呀也就是在开发接口的时候把HTTP动词独立出来。2核心思想二将系统中的任何信息用户、订单、图片等抽象为资源每个资源都拥有自己的 URL比如/clothes/{id}/clothes/478553 表示访问优衣库id478553 的衣服。比如书的资源id用/books/{id}表示/books/30表示访问id为30的书。如果你想找作者是“天下霸唱”的书那作者名可不是资源的id没有作者相关的url就只能用参数的形式访问了/books?author天下霸唱3之前理解的一个误区并不是通过url里是“/user/1/”还是user?id1去判断是否是restful风格。restful风格对url的格式并没有定义这两种url都可以有也就是说用RequestParamRequestBody注解和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默认识别出并赋予了nameyear等字段的类型2获得文档信息GET不仅可以获取索引信息还可以具体到索引中每个文档的信息。这里的文档类型type1写成_doc就行。3补充常用命令GET _cat/...获取es集群的信息查看集群的健康值GET _cat/health查看es包含的所有索引的信息GET _cat/indices?v3. 使用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/morning3、POST更新文档同上文POST test1/_doc/zxf/_update { doc:{ name:修改后的name } }4、简单的搜索1 在索引中根据关键字搜索文档# 搜索类型为type1的索引test1中name字段值为zxf的文档 GET test1/type1/_search?qname:zxf# 搜索类型为type1的索引test1中year字段值为2022的文档 GET test1/type1/_search?qyear: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关键字实现的是“逻辑与” AND2)should关键字实现的是“逻辑或”OR3)must_not关键字实现的是“逻辑非”NOTname字段不带“福”字的文档被查询出来了。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 } } }7term精确查询先看模糊查询的结果精确查询没查到。必须要输入完整的“我想要敬业福”才能匹配到相当于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 classkey stylecolor:red, post_tags: /p, fields: { name: {} } } }