elasticsearch 7.9.3知识归纳整理(二)之es基本原理及使用kibana操作es的常见命令

news2024/12/25 10:49:55

es基本原理及使用kibana操作es的常见命令

一、es的基本原理与基础概念

1.1 倒排索引

倒排索引源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted
index)。带有倒排索引的文件我们称为倒排索引文件,简称倒排文件(inverted file)。
如图
在这里插入图片描述

1.2 索引 index

一个索引就是一个拥有几分相似特征的文档的集合。比如说,可以有一个客户 数据的索引,另一个产品目录的索引,还有一个订单数据的索引
一个索引由一个名字来标识(必须全部是小写字母的),并且当我们要对对应 于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字
类似于mysql中的库的概念,不同的是es的数据是存于索引,mysql是存于库下面的表

1.3 集群Cluster

一个集群就是由一个或多个服务器节点组织在一起,共同持有整个的数据,并一起提供索引和搜索功能。一个Elasticsearch集群有一个唯一的名字标识,这个名字默认就是”elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。

1.4 节点Node

集群中包含很多服务器,一个节点就是其中的一个服务器。作为集群的一部分,它存储数据,参与集群的索引和搜索功能

1.5 分片

分片一个索引可以存储超出单个结点硬件限制的大量数据。比如,一个具有10亿文
档的索引占据1TB的磁盘空间,而任一节点都没有这样大的磁盘空间;或者单个节点 处理搜索请求,响应太慢 为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,这些份就叫 做分片当创建一个索引的时候,可以指定你想要的分片的数量 每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置 到集群中的任何节点上 分片很重要,主要有两方面的原因
1.允许水平分割/扩展你的内容容量
2.允许在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量
原则:分片数要配置成集群节点数的倍数,且不超过3倍,业务索引每个分片不超过30GB。

1.6 副本

在一个网络 /
云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。
副本之所以重要,有两个主要原因 1) 在分片/节点失败的情况下,提供了高可用性。
注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非 常重要的 2)
扩展搜索量/吞吐量,因为搜索可以在所有的副本上并行运行 每个索引可以被分成多个分片。一个索引有0个或者多个副本
一旦设置了副本,每个索引就有了主分片和副本分片,分片和副本的数量可以 在索引
在索引创建之后,可以在任何时候动态地改变副本的数量,但是不能改变分片的数量,也就是创建索引的时候就创建分片
例如:某es集群有3个节点

PUT eslog
{
	"settings":{
		"number_of_shards":3,
		"number_of_replicas":1
	}
}

1.7 映射(Mapping)

mapping是处理数据的方式和规则方面做一些限制,如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的,其它就是处理ES里面数据的一些使用规则设置也叫做映射,按着最优规则处理数据对性能提高很大,因此才需要建立映射,并且需要思考如何建立映射才能对性能更好。

GET my_index/_mapping

设置

创建新的索引并设置mapping信息

PUT user
{
  "mappings": {
    "properties": {
      "address": {
        "type": "text",
        "index": false
      },
      "age": {
        "type": "long"
      },
      "name": {
        "type": "text"
      }
    }
  }

二、使用kibana操作es的常见命令

2.1 基础命令

#所有节点 GET /_cat/nodes/
#查看主节点 GET /_cat/master
#查看健康状况 GET /_cat/health
#查看所有索引 GET /_cat/indices
#查看所有索引及数据量 GET /_cat/indices?v
#查看索引数据 GET /eslog/_search
结果说明:
在这里插入图片描述
#查看分词器装没有
#最大分词
GET _analyze { "analyzer":"ik_max_word", "text":"我是中国人" }
#最小分词
GET _analyze { "analyzer":"ik_smart", "text":"我是中国人" }
#所有节点
GET /_cat/nodes/ dilmrt代表全部权限
添加索引 PUT /eslog
删除索引 DELETE /eslog
查看索引 GET /eslog

2.2 索引数据的操作

2.2.1 建立索引并插入数据
创建索引,并插入数据
PUT /eslog

PUT /eslog/_doc/1
{ 
  "name": "张三",
  "sex": 1, 
  "age": 25,
  "address": "广州天河公园" 
}
PUT /eslog/_doc/2 
{ "name": "李四", 
  "sex": 1, 
  "age": 28, 
  "address": "广州荔湾大厦"
}

PUT /eslog/_doc/3 
{ "name": "王五",
 "sex": 0, 
 "age": 26, 
 "address": "广州白云山公园" 
 }
 
 PUT /eslog/_doc/4 
 { "name": "admin", 
 "sex": 0, 
 "age": 22, 
 "address": "长沙橘子洲头"  } 
 PUT /eslog/_doc/5 
 { "name": "小明", 
 "sex": 0, 
 "age": 19, 
 "address": "长沙岳麓山"
 }
POST /eslog/_doc
 { "name": "长沙", 
 "sex": 0, 
 "age": 19, 
 "address": "长沙岳麓山"
 }
2.22 索引数据的增删改查

1、当前索引 doc类型的所有文档
GET /eslog/_doc/_search
格式: GET /索引名称/类型/_search
举例: GET /eslog/_doc/_search
类似: SQL: select * from eslog

#2、条件查询, 如要查询age等于28岁的 _search?q=:**
GET /eslog/_doc/_search?q=age:25
格式: GET /索引名称/类型/_search?q=:**
举例: GET /es_db/_doc/_search?q=age:28
类似: SQL: select * from student where age = 28

3、范围查询, 如要查询age在25至26岁之间的 _search?q=[** TO **] 注 意: TO 必须为大写
GET /eslog/_doc/_search?q=age[25 TO 26]
格式: GET /索引名称/类型/_search?q=***[25 TO 26]
举例: GET /es_db/_doc/_search?q=age[25 TO 26]
类似: SQL: select * from student where age between 25 and 26

4、根据多个ID进行批量查询 _mget ,注意:这里的id是指es的生成的id(若未指定)不是数据里的id
GET /eslog/_doc/_mget { "ids":["3","2"] }
格式: GET /索引名称/类型/_mget
举例: GET /es_db/_doc/_mget { “ids”:[“1”,“2”] }
类似:SQL: select * from student where id in (1,2)

5、查询年龄小于等于28岁的 :<= (同理:>,<,>=,<=)
GET /eslog/_doc/_search?q=age:<=28
格式: GET /索引名称/类型/_search?q=age:<=**
举例:GET /es_db/_doc/_search?q=age:<=28
类似: SQL: select * from student where age <= 28

6、分页查询 from=&size= (注意:from+size不能超过10000(默认值,可以手动修改))
GET /eslog/_doc/_search?q=age[25 TO 26]&from=0&size=1
格式: GET /索引名称/类型/_search?q=age[25 TO 26]&from=0&size=1
举例: GET/es_db/_doc/_search?q=age[25 TO 26]&from=0&size=1
类似:SQL: select * from student where age between 25 and 26 limit 0, 1

7、对查询结果只输出某些字段 _source=字段,字段
GET /eslog/_doc/_search?_source=name,age
格式: GET /索引名称/类型/_search?_source=字段,字段
举例: GET /es_db/_doc/_search?_source=name,age
类似: SQL: select name,age from student

8、对查询结果排序 sort=字段:desc/asc
GET /eslog/_doc/_search?sort=age:asc
格式: GET /索引名称/类型/_search?sort=字段 desc
类似: SQL: select * from student order by age desc

2.23 DSL语言高级查询

1、term 根据名称精确查询姓名 term, term查询不会对字段进行分词查询,会 采用精确匹配 注意: 采用term精确查询, 查询字段映射类型属于为keyword

 POST /eslog/_doc/_search  {  
 "query": 
     {  "term": 
     	{ 
     		"name": "admin"
       } 
     }    
   } 
 类似: SQL: select * from student where name = 'admin'

1.1 多关键字精确查询

 POST /eslog/_search 
 {
  "query": {
    "terms": {
      "name": ["zhangsan","lisi"]
    }
  }
}
 类似: SQL: select * from student where name in ('zhangsan','lisi')

2、match 根据备注信息模糊查询 match, match会根据该字段的分词器,进行分 词查询

 POST /eslog/_doc/_search 
 { 
   "from": 0, 
   "size": 2, 
   "query": { 
   "match": { 
     "address": "广州天" 
     } 
   } 
 }
 类似: SQL: select * from user where address like '%广州%' limit 0, 2

3、 multi_match 多字段模糊匹配查询与精准查询 multi_match

POST /eslog/_doc/_search 
{  
  "query":{  
    "multi_match":{  
      "query":"长沙",  
      "fields":["address","name"]  
    }  
  } 
}

类似:SQL: select * from student where name like '%张三%' or address like '%张 三%'

注:json请求字符串中部分字段的含义
range:范围关键字
gte 大于等于
lte 小于等于
gt 大于
lt 小于
now 当前时间

  1. range范围查询
POST /eslog/_doc/_search 
{ 
  "query" : { 
    "range" : { 
      "age" : { 
        "gte":25, 
        "lte":28 
      }
    }
  } 
}
类似于:SQL: select * from user where age between 25 and 28

5.from+ size分页、输出字段、排序综合查询

POST /eslog/_doc/_search 
{ 
  "query" : { 
    "range" : { 
      "age" : { 
        "gte":25, 
        "lte":28 
        } 
      } 
    }, 
    "from": 0, 
    "size": 2, 
    "_source": ["name", "age", "book"], 
    "sort": {"age":"desc"} 
    }
  1. filter过滤器方式查询,它的查询不会计算相关性分值,也不会对结果 进行排序, 因此效率会高一点,查询的结果可以被缓存。
POST /eslog/_doc/_search 
{ 
  "query" : { 
    "bool" : { 
      "filter" : { 
        "term":{ 
          "age":25 
          } 
      } 
    } 
  } 
}
  1. _delete_by_query按条件删除
POST eslog/_delete_by_query
{
	"query":{
		"match":{
			"sensorName":"一体化设备"
		}
	}
}

8.bool/filter/range复杂删除里面的条件跟查询条件一样的,例如按时间范围删除

POST eslog/_delete_by_query
{
	"query":{
		"bool":{
			"filter":[
			  {
			    "range":{
			      "loginTimeMills":{
			        "from":1628004803000,
			        "to":1629957806000
			      }
			    }
			  }
			  ]
		}
	}
}

keyword 与 text 映射类型的区别 将 book 字段设置为 keyword 映射 (只能精准查询, 不能分词查询,能聚合、 排序、过滤)将 book 字段设置为 text 映射 (能模糊查询, 能分词查询,不能聚合、排 序)。
#查看es索引字段的类型(keyword或者text)
GET /eslog/_mapping?pretty

9.过滤返回字段
includes:来指定想要显示的字段
excludes:来指定不想要显示的字段

POST /eslog/_search{
  "_source": {
    "includes": ["name","nickname"]
  },  
  "query": {
    "terms": {
      "nickname": ["zhangsan"]
    }
  }
}

10 .bool组合查询 bool把各种其它查询通过must(必须 )、must_not(必须不)、should(应该)的方式进行组合

POST /student/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "name": "zhangsan"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": "40"
          }
        }
      ],
      "should": [
        {
          "match": {
            "sex": "男"
          }
        }
      ]
    }
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】机器学习中常用的损失函数一览

问题 机器学习中常用的损失函数总结 前言 我们经常听到损失函数、代价函数和目标函数这三种说法&#xff0c;这三种说法有什么联系和区别呢&#xff1f;这里明确下&#xff1a; 损失函数 Loss Function 通常是针对单个训练样本而言的&#xff0c;给定一个模型输出 y^\hat{y…

设计模式 - UML类图

1. 什么是 UML 统一建模语言(Unified Modeling Language,UML)是用来设计软件的可视化建模语言。它的特点是简单、统图形化、能表达软件设计中的动态与静态信息。L从目标系统的不同角度出发&#xff0c;定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图部署…

8种数据结构

快速介绍8种常用数据结构 数据结构是一种特殊的组织和存储数据的方式&#xff0c;可以使我们可以更高效地对存储的数据执行操作。数据结构在计算机科学和软件工程领域具有广泛而多样的用途。 几乎所有已开发的程序或软件系统都使用数据结构。此外&#xff0c;数据结构属于计算…

【回答问题】ChatGPT上线了!有哪些3D点云算法模型?3D点云算法模型实现代码?

有哪些3D点云算法模型&#xff1f; 3D点云算法的模型有很多种&#xff0c;以下是一些常见的算法模型&#xff1a; 归一化重心法&#xff08;Normalized point-to-point ICP&#xff09;&#xff1a;是一种常用的模型配准方法&#xff0c;用于将两个模型中的点匹配起来。 基于…

跨年晚会前夕,曹云金和前妻复合了

每到跨年晚会的时候&#xff0c;总会有大的新闻事件发生&#xff0c;比如说在今年跨年晚会前夕&#xff0c;主持人何炅的老父亲&#xff0c;就非常不幸地驾鹤西去了。话说主持人何炅&#xff0c;在父亲离开后坚强地主持节目&#xff0c;他泪眼婆娑的表情&#xff0c;也登上了各…

电子游戏销售之回归模型与数据可视化

电子游戏销售之回归模型与数据可视化 文章目录电子游戏销售之回归模型与数据可视化0、写在前面1、回归模型1.1 模型建立准备1.2 建立模型1.3 模型分析2、数据可视化3、参考资料0、写在前面 该篇文章的任务包括以下3个方面 检测与处理缺失值建立回归模型数据可视化 实验环境 Pyt…

我的2022年总结

我的2022年总结 行走于世&#xff0c;风大时要表现逆的风骨&#xff0c;风小时要表现顺的悠然。 我们可以转身&#xff0c;但是不必回头&#xff0c;即使有一天你发现自己走错了&#xff0c;你也应该转身大步朝着对的方向去&#xff0c;而不是回头埋怨自己错了。 一、旧事 …

INT201-Decision, Computation and Language(2)

文章目录5. Turing Machine5.1 TM Configuration5.2 TM Transitions5.3 TM Computation5.4 Language accepted by TM5.5 Decider5.6 Multi-tape TM5.6.1 Multi-tape TM equivalent to 1-tape TM5.7 Nondeterministic TM5.7.1 Address5.7.2 NTM equivalent to TM5.8 Enumerable …

【Linux操作系统】yum三板斧和yum源的配置

文章目录一.Linux下软件的生态二.yum三板斧1.yum简介2.list搜索软件包3.install下载并安装4.remove卸载软件三.windows/Linux下文件互传1.lrzsz的查看和下载安装2.rz上传3.sz下载四.Linux软件生态的本土化1.镜像简介2.Linux软件生态的本土化五.yum源的配置1.找到yum源配置文件并…

Jedis: Java连接redis服务

文章目录一、编程语言与 Redis二、Jedis 连接三、JedisPool 连接池四、可视化客户端提示&#xff1a;以下是本篇文章正文内容&#xff0c;Redis系列学习将会持续更新 一、编程语言与 Redis ● Java 语言连接 redis 服务   Jedis   SpringData Redis   Lettuce ● C 、C …

ArcGIS基础实验操作100例--实验40构建点对连线

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验40 构建点对连线 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&…

可视化系列讲解:canvas的动画实现

文章目录一、Canvas动画1.1 Canvas绘图都是通过JavaScript 去操控的&#xff0c;如要实现一些交互性动画是相当容易的。那Canvas是如何做一些基本动画的&#xff1f;1.2 Canvas 画出一帧动画的基本步骤&#xff08;如要画出流畅动画&#xff0c;1s 需绘60帧&#xff09;&#x…

【回答问题】ChatGPT上线了!推荐30个以上比较好的自然语言处理模型

【回答问题】ChatGPT上线了&#xff01;推荐40个以上比较好的自然语言处理模型以及github源码&#xff1f; BERT (Bidirectional Encoder Representations from Transformers): https://github.com/google-research/bert GPT (Generative Pre-training Transformer): https:/…

Taro笔记

Taro官网:https://nervjs.github.io/taro-docs/docs/ Taro简介 可使用React、Vue等框架开发跨端开发框架,一套代码编译到多端,使用Taro,只书写一套代码,再通过Taro的编译工具,将源代码分别编译出可以在不同端(微信小程序、H5、RN等)运行的代码。Taro 核心转化图 Taro使…

数据链路层重点总结

文章目录前言一、MAC地址二、一跳一跳的网络传输三、以太网四、ARP协议4.1 ARP协议的作用4.2 ARP协议的工作流程五、MTU5.1 什么是MTU5.2 MTU对IP协议的影响5.3 MTU对UDP协议的影响5.4 MTU对于TCP协议的影响总结前言 又是新的一年&#xff0c;展望2023年&#xff0c;博主给大家…

可视化系列讲解:canvas的进阶使用(颜色和样式设置,绘制文本,绘制图片)

文章目录一、Canvas的颜色和样式设置1.1 颜色&#xff08;不设置默认黑色&#xff09;1.2 透明度 Transparent1.3 线型 Line styles二、Canvas绘制文本2.1 文本的样式&#xff08;需在绘制文本前调用&#xff09;2.2 fillText(text, x, y [, maxWidth])2.3 strokeText(text, x,…

回首2022,展望2023

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;Java领域新星创作者&#x1f4d5;系列专栏&#xff1a;Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到…

【自学Java】Java数据类型

Java数据类型 Java数据类型 数据类型在编程语言中占有重要的地位。Java 的数据类型分为基本数据类型和引用数据类型。 Java基本类型 Java 基本数据类型包括&#xff1a;boolean&#xff0c;byte&#xff0c;char&#xff0c;short&#xff0c;int&#xff0c;long&#xff…

node.js中fs\path\http模块的使用

&#x1f973;博 主&#xff1a;初映CY的前说(前端领域) &#x1f31e;个人信条&#xff1a;想要变成得到&#xff0c;中间还有做到&#xff01; &#x1f918;本文核心&#xff1a;Node.js的fs\path\http模块的使用&#xff0c;模块化开发概念 目录 一、node.js概念与作…

dubbo源码实践-serialize层的例子

目录 1 serialize层概述 2 序列化的简单例子 2.1 项目截图 2.2 三个类的源码 2.2.1 ABC是实体类 2.2.2 TestSeriarsWrite把ABC对象序列化到文件中 2.2.3 TestSeriarsRead从文件中读取ABC对象 2.2.4 运行结果 3 展示一个通过URL属性动态切换序列化实现类的例子 3.1 原理分…