【Elasticsearch】基础概念(一)

news2024/11/24 3:15:35

简介:Elasticsearch(ES)是一个开源的分布式搜索和分析引擎,用于快速存储、搜索和分析大量数据。它具有高性能、可扩展性和灵活性的特点,被广泛用于构建实时搜索、日志分析、数据可视化等应用。

本人主要介绍Elasticsearch(ES)的部署方式和基础概念知识,使用docker compose搭建ES+Kibana环境,对ES中索引和类型进行的介绍。对后续检索等功能铺垫。

一、环境准备

版本

Docker version 20.10.22
elasticsearch:7.13.3
kibana:7.13.3

部署方式

docker-compose部署

version: '3.1'
services:
  elasticsearch:
    image: elasticsearch:7.13.3
    container_name: elasticsearch
    privileged: true
    environment:
      - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
      - "discovery.type=single-node" #以单一节点模式启动
      - "ES_JAVA_OPTS=-Xms512m -Xmx1096m" #设置使用jvm内存大小
      - bootstrap.memory_lock=true
    volumes:
      - ./es/plugins:/usr/local/dockercompose/elasticsearch/plugins #插件文件挂载
      - ./es/data:/usr/local/dockercompose/elasticsearch/data:rw #数据文件挂载
      - ./es/logs:/usr/local/dockercompose/elasticsearch/logs:rw
    ports:
      - 9200:9200
      - 9300:9300
    deploy:
     resources:
        limits:
           cpus: "2"
           memory: 1000M
        reservations:
           memory: 200M
  kibana:
    image: kibana:7.13.3
    container_name: kibana
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      ELASTICSEARCH_HOSTS: http://elasticsearch:9200 #设置访问elasticsearch的地址
      I18N_LOCALE: zh-CN
    ports:
      - 5601:5601

访问地址

如图点击菜单栏,跳转到命令页面
地址:http://localhost:5601/app/home#/
image.png
image.png

二、基础概念

分片和副本

分片

索引分片就是把索引数据切分成多个小的索引块,这些小的索引块能够分发到同一个集群中的不同节点。

副本

分片副本用来应对不断攀升的吞吐量以及确保数据的安全性。

过度分片

在检索时,检索的结果是该索引每个分片上检索结果的总和。(假设查询10条数据,有5个分片,数据库实际输出了50条数据,取前10条实现的)对于数据量少的索引,这样无疑增加了工作量。但是在ES中创建了索引后,不允许进行修改,如果想修改只能新建索引通过导入的方式到新索引中。

分片数不宜太多也不能太少,一个简单的索引计算公式:
最大节点数 = 分片数 * (副本数 + 1)
换句话说,如果你计划用10个分片和2个分片副本,那么最大的节点数是30。

Index与Type

有人说index对应database,type对应table,其实是不准确的,最好不要与MySQL进行对应记忆。以一个问题来表述:
要存储一批新的数据时,应该在已有 index 里新建一个 type,还是给它新建一个 index?

Index

index的分片中,每一个都是一个Lucene Index,都需要消耗磁盘,内存和文件描述符。因此,一个大的 index 比多个小 index 效率更高:Lucene Index 的固定开销被摊分到更多文档上了。
多个index每个index还有分片的情况,在查询时需要更多的CPU和内存来处理查询结果,所以 index 少一点间接提高性能。

Type

在Elasticsearch 7.x 后,type已经正式废除,新增时会自动添加类型 _doc。
从另外一个角度来讲:

  • 在index创建多个type,不同type间字段是相同的,会影响查询结果分数和多冗余字段。
  • es对冗余出的空字段支持不高,会影响性能。

与MySQL对应概念(不推荐)

ElasticSearchMySQL
Index(索引)Database(数据库)
Type(类型)Table(表)
Document(文档)Row(行)
Field(属性)Column(列)
MappingSchema

三、字段类型

ES中的字段类型

一般使用常用字段中的前四个。

  • 常用字段:
    • Text:存储长文本或短语,进行全文本搜索。
    • Keyword:存储关键字、标签或其他短文本,用于精确匹配和排序。
    • Date:存储日期和时间信息。
    • Long:存储长整型数据。
    • Double:存储双精度浮点数数据。
    • Boolean:存储布尔值。
    • IP:存储IP地址。
  • 其他字段:
    • Object:存储一个 JSON 对象,可以嵌套其他字段。
    • Nested:存储一个数组对象,可以嵌套其他字段。
    • Geo Point:存储经纬度坐标信息,用于地理位置相关的查询。
    • Geo Shape:存储复杂的地理形状数据,例如多边形和圆形。
    • Completion:用于实现搜索建议和自动完成功能。
    • Binary:存储二进制数据,如图像、文件等。
    • Array:存储数组或多个值。

四、索引

创建索引

创建索引,my_test_index,分别有三个字段id、name、remark
PUT:代表请求方式为 put 类型
my_test_index:代表索引的名称
number_of_shards:分片数
number_of_replicas:副本数

正如上述所说,put请求是restful请求中的类型,也就是说es支持http请求的方式执行命令,只需在/前添加es的地址即可。

PUT /my_test_index
{
  	"settings": {
		"number_of_shards": 3,
		"number_of_replicas": 1
	},
  "mappings": {
    "properties": {
      "id": {
        "type": "integer"
      },
      "name": {
        "type": "keyword"
      },
      "remark": {
        "type": "text"
      }
    }
  }
}

// 执行结果
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my_test_index"
}

索引修改

添加字段

注意使用 _mapping 来添加字段

POST /my_test_index/_mapping
{
  "properties": {
    "age": {
      "type": "integer"
    }
  }
}

// 执行结果
{
  "acknowledged" : true
}
修改字段

es是不允许修改字段的,如下

POST /my_test_index/_mapping
{
  "properties": {
    "age": {
      "type": "keyword"
    }
  }
}

// 执行结果
{
  "error" : {
    "root_cause" : [
      {
        "type" : "illegal_argument_exception",
        "reason" : "mapper [age] cannot be changed from type [integer] to [keyword]"
      }
    ],
    "type" : "illegal_argument_exception",
    "reason" : "mapper [age] cannot be changed from type [integer] to [keyword]"
  },
  "status" : 400
}
默认添加字段

对索引中没有字段进行保存时,es能够自动添加字段

POST /my_test_index/_doc
{
  "id": "1",
  "name": "张三",
  "gender": "F"
}

// 执行结果
{
  "_index" : "my_test_index",
  "_type" : "_doc",
  "_id" : "8deesYoBBTGuuZu3TwAp",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

通过命令查询es索引信息
再返回结果中发现字段类型为 text,但是还有名为 keyword 的子字段,实际上可以作为两种字段来使用,正常使用当做 text 字段进行全文检索。
当使用时按照 gender.keyword 来使用,字段类型为 keyword,但是长度不能超过256,超过的部分不计作 keyword 内的数据。

GET /my_test_index

// 返回结果
{
  "my_test_index" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "age" : {
          "type" : "integer"
        },
        "gender" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
        // 省略其他字段
      }
    }
  }
}

五、总结

  1. ES中分片数和副本数需要按照实际情况进行合理分配,参考上述公式。
  2. ES中的type默认填写_doc即可,相比于index变多不如使index更大更有利于ES查询。
  3. 记忆ES索引和文档时,尽量不要与MySQL相关概念一起记忆。
  4. ES在已有索引上只能新增字段可以通过命令或者ES自动创建来实现,不允许修改字段。

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

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

相关文章

【自监督Re-ID】ICCV_2023_Oral | ISR论文阅读

Codehttps://github.com/dcp15/ISR_%20ICCV2023_Oral 面向泛化行人再识别的身份导向自监督表征学习,清华大学 目录 导读 摘要 相关工作 DG ReID 用于ReID的合成数据 无监督表征学习 Identity-Seeking Representation Learning 结果 消融实验 导读 新角度…

WPF Frame content binding page(Using MVVM)

前言 这个binding问题困扰了我几天时间了,弄了好的demo试了又试。之前老是认为是ItemsControl中数据模版DataTemplate中绑定Command问题,根据测试没问题。一直在考虑是否是绑定DataContext对象没指明同一个上下文对象问题。最后在MainWindow.xaml文件中F…

Nginx location 精准匹配URL = /xxx

Location是什么? Location是Nginx中的块级指令(block directive),通过配置Location指令块,可以决定客户端发过来的请求URI如何处理(是映射到本地文件还是转发出去)及被哪个location处理。 匹配模式 分为两种模式&…

ETL增量抽取模式实践与调优

在ETL(Extract, Transform, Load)流程中,增量抽取是一种重要的数据提取方式,允许从源系统中仅提取发生变化的数据,以提高处理效率和减少资源消耗。增量抽取模式有多种实现方式,包括时间戳增量、增量标记和增…

Bug:Mac版Goland无法进行debug

Bug:Mac版Goland无法进行debug 报错: API server listening at: 127.0.0.1:58574 debugserver-(#)PROGRAM:LLDB PROJECT:lldb-1400.0.38.17 for x86_64 (running under translation). error: failed to launch process /Library/Developer/CommandLineT…

电缆隧道在线监测系统:提升电力设施安全与效率的关键

随着城市化进程的加快,电力电缆隧道在保障城市电力供应方面的地位日益重要。然而,电缆隧道环境复杂,容易受到多种因素影响,如温度、湿度、烟雾、水位等,严重威胁电力设施的安全与稳定运行。在此背景下,电缆…

华为OD机考算法题:最小数量线段覆盖

目录 题目部分 解读与分析 代码实现 题目部分 题目最小数量线段覆盖难度难题目说明给定坐标轴(一维坐标轴)上的一组线段,线段的起点和终点均为整数并且长度不小于1,请你从中找到最少数量的线段,这些线段可以覆盖住…

基于微信小程序的社区垃圾回收管理系统设计与实现

文章目录 前言系统主要功能:具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

Eclipse安装sts插件(eclipse 内置应用市场无法搜索到sts时)

下面提供一个可以通过help->install new software->add添加外部sts(spring tool suite)插件,springplugins - https://download.springsource.com/release/TOOLS/update/e4.12/ 官网(https://spring.io/tools3/sts/all)可以下载不同的…

Nodejs基于Vue.js博物馆预约系统7e122

博物馆展览与服务一体化,其工作流程繁杂、多样、管理复杂与设备维护繁琐。而计算机已完全能够胜任博物馆展览与服务一体化工作,而且更加准确、方便、快捷、高效、清晰、透明,它完全可以克服以上所述的不足之处。这将给查询信息和管理带来很大…

Spring Boot 中的 CSRF 保护配置

Spring Boot 中的 CSRF 保护配置 CSRF(Cross-Site Request Forgery)是一种网络攻击,它利用已认证用户的身份来执行未经用户同意的操作。Spring Boot 提供了内置的 CSRF 保护机制,可以帮助您防止这种类型的攻击。本文将介绍如何在…

ArduPilot开源飞控之GCS显示DPS310异常问题

ArduPilot开源飞控之GCS显示DPS310异常问题 1. 源由2. 现象3. 分析3.1 Mission Planner3.2 Ardupilot3.3 AP_Baro分析3.4 AP_Baro定位 4. 修复5. 效果6. 参考资料7. 补充7.1 Ardupilot提交PR注意事项7.2 修复主要使用到的命令 1. 源由 2020年Ardupilot官网论坛就有开始讨论DPS…

CompletableFuture-链式语法和join方法介绍

2.4 案例精讲-从电商网站的比价需求展开 2.4.1 函数式编程已成为主流 Lambda表达式Stream流式调用Chain链式调用Java8函数式编程 函数式接口: 小结: 函数式接口: Java8新特性_四大内置核心函数式接口_java8 内置核心接口_ZHOU_VIP的博客-…

idea没有maven工具栏解决方法

背景:接手的一些旧项目,有pom文件,但是用idea打开的时候,没有认为是maven文件,所以没有maven工具栏,不能进行重新加载pom文件中的依赖。 解决方法:选中pom.xml文件,右键 选择添加为…

华为乾坤区县教育安全云服务解决方案(1)

华为乾坤区县教育安全云服务解决方案(1) 课程地址方案背景客户痛点分析区县教育网概述区县教育网业务概述区县教育网业务安全风险分析区县教育网安全运维现状分析区县教育网安全建设痛点分析 安全解决方案功能概述架构概述方案架构设备选型 课程地址 本…

mysql的锁分类:表锁和行锁和页面锁

一 锁的概念 1.1 锁的作用 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有…

难点解释-理解寄主机通过虚拟网络连接到虚拟机的概念

“寄主机”通过“虚拟网络”连接“虚拟机”的关键点Brainstorm 获得“虚拟机”的ip地址 ip a 确保“寄主机”能ping通“虚拟机” SSH客户端连接虚拟机 SSH客户端有很多,这里用的是XSHELL Q&A SSH连接提示超时 表明寄主机到虚拟机的网络没有通,检…

实现数据库用户校验

导入my-batis-plus依赖&#xff1a; <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3.1</version> </depende…

【图论C++】链式前先星(图(树)的存储)

/*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记&#xff1a;转载需获得博主本人…

Flink--6、输出算子(连接到外部系统、文件、kafka、MySQL、自定义Sink)

星光下的赶路人star的个人主页 世间真正温煦的春色&#xff0c;都熨帖着大地&#xff0c;潜伏在深谷 文章目录 1、输出算子&#xff08;Sink&#xff09;1.1 连接到外部系统1.2 输出到文件1.3 输出到Kafka1.4 输出到MySQL&#xff08;JDBC&#xff09;1.4 自定义Sink输出 1、输…