【Elasticsearch】基础概念(一)

这篇具有很好参考价值的文章主要介绍了【Elasticsearch】基础概念(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介: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#/
【Elasticsearch】基础概念(一),elasticsearch,jenkins,大数据
【Elasticsearch】基础概念(一),elasticsearch,jenkins,大数据

二、基础概念

分片和副本

分片

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

副本

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

过度分片

在检索时,检索的结果是该索引每个分片上检索结果的总和。(假设查询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对应概念(不推荐)

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

三、字段类型

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 内的数据。文章来源地址https://www.toymoban.com/news/detail-730951.html

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自动创建来实现,不允许修改字段。

到了这里,关于【Elasticsearch】基础概念(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ES】Elasticsearch核心基础概念:文档与索引

    es的核心概念主要是:index(索引)、Document(文档)、Clusters(集群)、Node(节点)与实例,下面我们先来了解一下Document与Index。 在讲解Document与Index概念之前,我们先来了解一下RESTful APIs,因为下面讲解Document和Index的时候会使用到。 当我们把es服务器启动起来之后,要怎么调用呢?

    2024年02月05日
    浏览(49)
  • 重学Elasticsearch第1章 : Elasticsearch, Kibana概念、Elasticsearch相关术语

    Elasticsearch : 基于Json的分布式搜索和分析引擎 搜索、聚合分析、大数据存储 分布式、高性能、高可用、可伸缩、易维护 支持文本搜索、结构化数据、非结构化数据、地理位置搜索等 Logstash : 动态数据收集管道,生态丰富 Kibana : 提供数据的可视化界面 查询、查看并与存储在

    2023年04月16日
    浏览(36)
  • 引言:ElasticSearch的基本概念

    ElasticSearch是一个基于分布式搜索和分析的开源搜索引擎。它是一个实时、可扩展、高性能的搜索引擎,可以处理大量数据并提供快速、准确的搜索结果。ElasticSearch的核心概念包括索引、类型、文档、映射、查询和聚合等。在本文中,我们将深入探讨ElasticSearch的基本概念、核

    2024年02月19日
    浏览(39)
  • 一、ElasticSearch 入门概念

        ElasticSearch是一个开源的分布式、高度可扩展的搜索引擎,简单可以理解为类似百度、Google这样的搜索引擎产品。 它能够快速、近乎实时的存储、搜索和分析大量数据。 电商搜索引擎: 许多电商平台使用Elasticsearch作为其搜索引擎,以提供实时、高性能的商品搜索和过滤

    2024年01月24日
    浏览(27)
  • elasticsearch 核心概念

    elasticsearch 是一个 近实时 的 搜索和分析 平台,这意味着从 索引文档 到可 搜索文档 都会有一段微小的延迟(通常是1s以内)。这种延迟主要是因为 elasticsearch 需要进行数据刷新和索引更新。 在 elasticsearch 中,\\\"近实时\\\"(Near Real-Time, NRT)是指在数据被索引之后,它不会立即出

    2024年02月01日
    浏览(52)
  • Elasticsearch 核心概念与原理

    作者:禅与计算机程序设计艺术 Elasticsearch是一个开源、分布式、RESTful搜索和分析引擎。它的主要特性如下: 分布式特性:Elasticsearch集群中的节点彼此协同工作,形成一个整体,从而提供横向扩展性; RESTful API接口:Elasticsearch提供了丰富的基于HTTP协议的API接口,支持全文检索

    2024年02月07日
    浏览(49)
  • 【Elasticsearch】几点核心概念

    索引 一个索引就是一个拥有几分相似特征的文档的集合。 Eg:一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。 能搜索的数据必须索引,这样的好处是可以提高查询速度 类型 一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。 ES

    2024年02月02日
    浏览(41)
  • Elasticsearch的一些基本概念

    Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位。 文档会被序列化成JSON格式,保存在Elasticsearch中。 JSON对象由字段组成,每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围类型)。 每个文档都有一个UniqueID,你可以自己指定ID,或者通过

    2024年02月12日
    浏览(39)
  • elasticsearch索引、文档、映射等概念

    1、文档(document) 文档是存储在Elasticsearch中的一个JSON格式的字符串。它就像在关系数据库中表的一行。每个存储在索引中的一个文档都有一个类型和一个ID,每个文档都是一个JSON对象,存储了零个或多个字段或键值对。原始的JSON文档被存储在一个叫做_source的字段中,当搜

    2023年04月17日
    浏览(47)
  • ElasticSearch 核心概念以及常用命令

    概念: 这里可以类比与 MySQL 中的表,但是不同于表 在 es 中索引有三层含义 表示源文件数据:通常说集群中有 user 索引,即表示集群服务中存在 user 这样一张“表” 表示索引文件:以加速查询检索为目的而设计和创建的数据文件,通常承载于某些特定的数据结构,如哈希、

    2024年03月10日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包