草庐IT

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

玛丽莲茼蒿 2023-04-20 原文

目录

一、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风格 

在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": {}
   }
 }
}

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

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  4. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  5. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  6. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  7. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  8. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  9. ruby - 使用多个数组创建计数 - 2

    我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']

  10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

随机推荐