Kibana操作Elasticsearch教程

文章目录

  • 简介
    • ES文档操作
      • 创建索引
      • 查看索引
      • 创建映射字段
      • 查看映射关系
      • 字段属性详解
        • type
        • index
        • store
      • 字段映射设置流程
    • 新增数据
      • 新增会随机生成id
      • 新增自定义id
      • 智能判断
    • 修改数据
    • 删除数据
    • 查询
      • 基本查询
      • 查询所有(match_all)
      • 匹配查询
      • 多字段查询
      • 词条匹配
      • 多词条精确匹配
    • 结果过滤
      • 直接指定该字段
      • 指定includes和excludes
      • 高级查询
        • 布尔组合(多条件查询)
        • 范围查询
        • 模糊查询(fuzzy)
      • 排序
        • 单字段排序(sort)
        • 多字段查询
      • 聚合(aggregations)
        • 桶(bucket)类似于数据库中的分组group_by

简介

Kibana是一个基于Node.js的Elasticsearch索引库数据统计工具,可以利用Elasticsearch的聚合功能,生成各种图表,如柱形图、线状图、饼图等。
在开始之前,需要启动Kibana和Elasticsearch
ES的访问地址:http://ip:9200
Kibana的访问地址:http://ip:5601
操作步骤:进入到Kibana后,点击左侧的Dev Tools
在这里插入图片描述

ES文档操作

ES是面向文档的,存储文档的同时对其进行索引使其能够被搜索到。

创建索引

Elasticsearch采用Rest API风格,因此其API就是一次HTTP请求,可以使用任何工具发起http请求创建索引的请求格式。由于遵循REST风格,可以很直观的想到操作名。

  • POST新增
  • GET查询
  • DELETE删除
  • PUT修改
    在这里使用Kibana简化操作
    在这里插入图片描述
    number_of_replicas:设置索引库分片副本数量
    number_of_shards: 设置索引库分片数量

查看索引

  1. 查看某一个特定索引库
   GET 索引库名
  1. 查看所有的索引库
 GET *
  1. 删除索引
DELETE 索引库名
  1. 映射配置
    索引有了,接下来就是添加数据,但是在添加数据之前必须定义映射。 映射就是定义文档的过程,文档包含哪些字段,这些字段是否保存,是否索引,是否分词等。只有配置清楚,Elasticsearch才会帮我们进行索引库的创建。

创建映射字段

请求方式依然是PUT

PUT /索引库名/_mapping/类型名称
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true"store": true"analyzer": "分词器"
    }
  }
}
  • 类型名称:就是type的概念,类似于数据库中不同表字段名;任意填写,可以指定很多属性。
  • type:类型,可以是text、long、short、date、integer、object等
  • index:是否索引,默认为true
  • store:是否存储,默认为false(会自动生成一个_source备份)
  • analyzer:分词器,这里的ik_max_word即使用ik分词器

发起请求示例

PUT test/_mapping/goods
{
   "properties":{
     "title":{
     "type":"text",
     "analyzer":"ik_max_word"
     },
     "images":{
     "type":"keyword",
     "index":false
     },
     "price":{
     "type":"float"
     }
   }
}

字符串类型一共有两种,text代表进行分词,下面要加上分词器,这里使用的ik分词器中ik_max_word代表按照最大程度划分。
keyword不进行分词。

【问题】
在这里插入图片描述

  • elasticsearch创建索引时遇到analyzer[ik_max_word] not found for field[title]

【原因】
IK分词器插件未安装

查看映射关系

GET /索引库名/_mapping

字段属性详解

type

Elasticsearch中支持的数据类型非常丰富:
下面我们介绍几个关键的:
String类型,又分两种:

  • text:可分词,不可参与聚合
  • keyword:不可分词,数据作为完整字段进行匹配,可以参与聚合
    Numberical:数值类型,分两类
  • 基本数据类型:long、integer、short、byte、double、float、half_float
  • 浮点数的高精度类型:scaled_float
    需要指定一个精度因子,比如说10或者100,elasticseach会把真实值乘以这个因子存储,取出时再还原。
    Date:日期类型
    elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。
index

index影响字段的索引情况

  • true:字段会被索引,则可以用来进行搜索,默认值就是true
  • false: 字段不会索引,不能用来搜索
    ** index的默认值就是true,也就是说不进行任何配置,所有字段都会被索引。**
    但是有些字段是我们不希望被索引的,比如商品的图片信息,就需要手动设置index为false。
store

是否将数据进行额外存储。
在学习lucene和solr时,我们知道如果一个字段的store的值设置为false,那么在文档列表中就不会有这个字段的值,用户的搜索结果中不会显示出来。
但是在elasticsearch中,即使store设置为false,也可以搜索到结果,
原因是Elasticsearch在创建文档索引时,会将文档中的原始数据备份,保存在一个交_source的属性中,而且我们可以通过过滤_source来选择哪些要显示,哪些不显示。
而如果设置store为true,就会在_source以外额外存储一份数据,比较多余,因此一般我们都会将store设置为false,事实上,store的默认值就是false。

字段映射设置流程

在这里插入图片描述

新增数据

新增会随机生成id

POST /索引库/类型名
{
    “key”:"value"
}

在这里插入图片描述

新增自定义id

如果我们想要自己新增的时候指定id,可以这么做

POST /索引库/类型/id值
{
}

在这里插入图片描述

智能判断

在学习Solr时我们发现,我们在新增数据时,只能使用提前配置好映射属性的字段,否则就会报错。不过在Elasticsearch中并没有这样的规定。
事实上Elasticsearch非常智能,你不需要给索引库设置任何mapping映射,它也可以根据你输入的数据来判断类型,动态添加数据映射。
在这里插入图片描述
相对上个例子来说,我这里新增了color和address两个字段。再看下索引库的映射关系。
在这里插入图片描述
color和address都被成功映射了。

修改数据

把刚才新增的请求方式改为PUT,就是修改数据操作不过修改操作必须要指定id。

  • id对应文档存在,则修改
  • id对应文档不存在,则新增
    在这里插入图片描述
    注意:如果只修改了一个字段,那么原有的其他字段都会消失,只保留当前的这次修改,相当于覆盖

删除数据

DELETE test/goods/2

查询

  • 基本查询
  • _source过滤
  • 结果过滤
  • 高级查询
  • 排序

基本查询

不能设置查询多个条件,如果需要请用后面的高级bool查询

GET /索引库名/_search
{
      "query"{
            “查询类型”:{
                    “查询条件”:“查询条件值”
            }
      }
}

这里的query代表一个查询对象,里面可以有不同的查询属性

  • 查询类型:match_all,match,term,range等等
  • 查询条件:查询条件会根据类型的不同,写法也有差异,后面根据示例进行详细讲解。

查询所有(match_all)

在这里插入图片描述
hits:搜索结果的文档对象数组,每个元素是一条搜索到的文档信息。

  • _index:索引库
  • _type:文档类型
  • _id:文档id
  • _score:文档得分
  • _source:文档的源数据

匹配查询

在这里插入图片描述

多字段查询

multi_match与match类似,不同的是它可以在多个字段中查询

GET /test/_search
{
    "query":{
        "multi_match": {
            "query":    "小米",
            "fields":   [ "title", "subTitle" ]
        }
	}

在本例中,我们会在title和subtitle字段中查询小米这个词。

词条匹配

term查询被用于精确值匹配
这些精确值可能是数字、时间、布尔或者那些未分词的字符串(keyword)

GET /test/_search
{
    "query":{
        "term":{
            "price":2699.00
        }
    }
}

多词条精确匹配

terms查询和term查询一样,但它允许你指定多值进行匹配,如果这个字段包含了指定值中的任何一个值,那么这个文档满足条件。

GET /test/_search
{
    "query":{
        "terms":{
            "price":[2699.00,2899.00,3899.00]
        }
    }
}

结果过滤

默认情况下,elasticsearch在搜索的结果中,会把文档中保存在_source的所有字段都返回。如果我们只想获取其中的部分字段,我们可以添加_source的过滤。

直接指定该字段

GET /heima/_search
{
  "_source": ["title","price"],
  "query": {
    "term": {
      "price": 2699
    }
  }
}

指定includes和excludes

我们也可以通过下面的方法来实现过滤

  • includes:来指定想要显示的字段
  • excludes:来指定不想显示的字段
GET /test/_search
    {
      "_source": {
        "includes":["title","price"]
      },
      "query": {
        "term": {
          "price": 2699
        }
      }
    }

与下面的结果将是一样的:

    GET /test/_search
    {
      "_source": {
         "excludes": ["images"]
      },
      "query": {
        "term": {
          "price": 2699
        }
      }
    }

高级查询

布尔组合(多条件查询)
GET test/goods/_search
{
  
  "query": {
  
    "bool": {
      "must": [
        {"match": {
          "title": "小米电视"
        }}
      ],
      "must_not": [
        {
          "match": {
            "title": "电视"
          }
        }
      ]
    }
    
  }
}

查询bool里面结果全为true的情况。

范围查询

range查询找出那些落在指定区间内的数字或者时间,range允许以下操作符。

操作符说明
gt大于
gte大于等于
lt小于
lte小于等于
示例:
GET test/goods/_search
{
  "query": {
  "range": {
    "price": {
      "gte": 3000,
      "lte": 9909
    }
  }
  }
}
模糊查询(fuzzy)

fuzzy查询是term查询的模糊等价,它允许用户搜索词条与实际词条的拼写出现偏差,但是偏差的距离不得超过2.

GET /test/_search
    {
      "query": {
        "fuzzy": {
          "title": "appla"
        }
      }
    }

根据上面的示例,能够查询到apple的结果。我们也可以通过fuzziness来指定允许的编辑距离。

GET /test/_search
    {
      "query": {
        "fuzzy": {
            "title": {
                "value":"appla",
                "fuzziness":1
            }
        }
      }
    }

排序

单字段排序(sort)

sort可以让我们按照不同的字段进行排序,并且通过order指定排序的方式。
示例

GET /test/_search
{
  "query": {
    "match": {
      "title": "小米手机"
    }
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    }
  ]
}

sort是对查询后做的,不属于查询和过滤的条件,因此在query查询对象外面。

多字段查询

假定我们想要结合使用price和_score(得分)进行查询,并且匹配的结果首先按照价格排序,然后按照相关性得分排序。

GET test/goods/_search
{
  "query": {
    "bool": {"must": [
      {"match": {
        "title": "小米"
      }}
    ]}
  },
  "sort": [
    {
      "price": {
        "order": "desc"
      }
    },
    {
      "_score": {
        "order": "desc"
      }
    }
  ]
}

聚合(aggregations)

聚合可以让我们及其方便的实现对数据的统计分析
Elasticsearch中的聚合,包含多种类型,最常用的两种,一个叫桶,一个叫度量。

桶(bucket)类似于数据库中的分组group_by

桶的作用,是按照某种方式对数据进行分组,每一组数据在ES中被称为一个桶。Elasticsearch中提供的划分桶的方式有很多:

  • Date Histogram Aggregation:根据日期阶梯分组,例如给定阶梯为周,会自动每周分为一组。
  • Histogram Aggregation:根据数值阶梯分组,与日期类似;
  • Terms Aggregation:根据词条内容分组,词条内容完全匹配的为一组;
  • Range Aggregation:数值和日期的范围分组,指定开始和结束,然后按照阶段分组。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS 应用开发之创建PageAbility

开发者需要重写app.js/app.ets中的生命周期回调函数,开发者通过DevEco Studio开发平台创建PageAbility时,DevEco Studio会在app.js/app.ets中默认生成onCreate()和onDestroy()方法,其他方法需要开发者自行实现。接口说明参见前述章节&#xf…

maven 依赖机制

安全工程师为啥关注maven依赖 log 4j事件之后,大家开始更加关注开源组件安全漏洞这个事。纷纷引入SCA 软件成分分析工具来识别项目中存在的开源组件和漏洞。 在sca工具扫描之后,会报出一大堆组件,review这个事就是安全团队投入时间来研判了…

【Linux多线程】线程的同步与互斥

【Linux多线程】线程的同步与互斥 目录 【Linux多线程】线程的同步与互斥分离线程Linux线程互斥进程线程间的互斥相关背景概念问题产生的原因: 互斥量mutex互斥量的接口互斥量实现原理探究对锁进行封装(C11lockguard锁) 可重入VS线程安全概念常见的线程不安全的情况…

是谁?阻止CXL在AI场景大展身手~

CXL虽然被视为业内新宠,但好像在AI场景的应用反而没有得到广泛的响应。 AI场景对内存带宽、容量以及数据一致性有着极高需求,特别是在深度学习训练和推理过程中,大量数据需要在CPU、GPU、加速器以及内存之间快速、高效地流动。CXL作为一种新…

Java基础入门day24

day24 abstract 抽象:似是而非,像又不是,具备某种对象的特征,但不完整 生活中的抽象:动物,并不真实存在的事物 程序中的抽象:不应该被创建的对象,动物近视一种会吃会睡的对象&#…

Netty核心原理剖析与RPC实践16-20

Netty核心原理剖析与RPC实践16-20 16 IO 加速:与众不同的 Netty 零拷贝技术 今天的课程我们继续讨论 Netty 实现高性能的另一个高阶特性——零拷贝。零拷贝是一个耳熟能详的词语,在 Linux、Kafka、RocketMQ 等知名的产品中都有使用,通常用于…

【单调栈】力扣84.柱状图中最大的矩形

上篇文章我们介绍了使用 无重复值 单调栈代码解决 含有重复值 的问题,在文章的最后,留下了一道考察相同思想的题目,今天我们来看看如何套路解决该题。 (还没看过前几篇介绍的小伙伴赶快关注,在 「单调栈」 集合里查看…

通过node 后端实现颜色窃贼 (取出某个图片的主体rgb颜色 )

1.需求 我前端轮播图的背景色 想通过每一张轮播图片的颜色作为背景色 这样的话 需要通过一张图片 取出图片的颜色 这个工作通过前端去处理 也可以通过后端去处理 前端我试了试 color-thief 的插件 但是 这个插件是基于canvas 的模式来的 我需要在小程序中使用这个插件 而且是…

HarmonyOS-如何使用ArkTS声明式语法和基础组件,实现待办列表。

介绍 本篇Codelab将介绍如何使用ArkTS声明式语法和基础组件,实现简易待办列表。效果为点击某一事项,替换标签图片、虚化文字。效果如图所示: 相关概念 ArkTS语法:ArkTS是HarmonyOS的主要应用开发语言。ArkTS基于TypeScript&…

2024/3/29(MybatisPlus插件代码生成,静态工具,逻辑删除,枚举处理器.JSON处理器,分页插件,通用分页实体)

jdbc:mysql://localhost:3306/mp?useUnicodetrue&characterEncodingutf8&serverTimezoneUTC 需要这样 日志查看级别

【C++杂货铺】内管管理

目录 🌈前言🌈 📁 C/C中内存分布 📁 new 和 delete的使用 📁 new 和 delete的优点 📁 new 和 delete的原理 📂 operator new 和 operator delete函数 📂 内置类型 &#x1f4c2…

代码随想录-DAY4|leetcode-24,19,142,面试题 02.07

文章目录 22. 两两交换链表中的节点19. 删除链表的倒数第N个节点size-n方式删除双指针方式(推荐) 面试题 02.07. 链表相交142. 环形链表II暴力解法快慢指针(推荐) 22. 两两交换链表中的节点 leetcode链接:两两交换链表…

怎样一次性给多篇word文档标注拼音?一键批量注音

随着办公自动化的普及,我们经常会遇到需要处理大量Word文档的情况。在这些文档中,有时需要将文字标注上拼音,特别是在处理一些包含生僻字或需要拼音辅助阅读的文档时。然而,手动一篇篇地给Word文档标注拼音不仅效率低下&#xff0…

Docker搭建LNMP环境实战(08):安装php-fpm

1、编写php测试文件 在文件夹&#xff1a;/mnt/hgfs/dockers/test_site/www目录下创建文件&#xff1a;test.php&#xff0c;内容为&#xff1a; <?phpecho "hello world!!!!!! From test.php"; ?>2、编写php-fpm部署配置文件 在文件夹&#xff1a;/mnt/h…

mars3d兼容老版本Chrome 浏览器的附件参考记录

问题 源代码里面是es5的写法&#xff0c;怎么在浏览器上就转换了。 mars3d会将es5转es6吗&#xff1f; 看加载的Cesium.js源代码没有问题&#xff0c;但是模块里面的源代码已经转换了&#xff0c;再低版本浏览器上面会无法运行“Uncaught SyntaxError: Unexpected token ?”…

JVM(一)——内存结构

一. 前言 1、什么是 JVM? 1&#xff09;定义&#xff1a; Java Virtual Machine - java 程序的运行环境&#xff08;java 二进制字节码的运行环境&#xff09; 2&#xff09;好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收功能数组下标越…

测试员再也不怕漏测!花2年总结的这个测试模板太全了!

作为一个测试&#xff0c;最尴尬的莫过于分给你的task&#xff0c;别人做交叉兼容测试的时候&#xff0c;在你负责的内容里找出了很多你没有测试出来的bug。 我也曾因为测试不全被组长在工作群里艾特。说实话&#xff0c;真的恨不得找个地方躲起来。 为了避免自己再次出现类似…

用友BI告诉你,分析指标计算也可以很简单

分析数据&#xff0c;特别是分析财务数据&#xff0c;要计算得分析指标都非常多&#xff0c;涉及的数据来源也是各有不同&#xff0c;一旦哪个环节出了错就一切都得重来。难道分析指标的计算就没有更快更简单的办法了&#xff1f;奥威-用友BI告诉你&#xff0c;分析指标计算有别…

【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

新家装修选中央空调如何选?认准约克VRF中央空调

在现代家居生活中,追求舒适和健康生活环境的家庭越来越倾向于选择中央空调系统。面对市场上琳琅满目的中央空调品牌,如何挑选一款合适的家用中央空调成为许多消费者的一大难题。今天,我们以约克VRF中央空调为例,深入探讨其特点和优势,为广大家庭提供一个舒适的选择答案。 首先…