Elasticsearch学习(2)—— 常见术语

为什么80%的码农都做不了架构师?>>>   hot3.png

cluster (集群):一个或多个拥有同一个集群名称的节点组成了一个集群。每个集群都会自动选出一个主节点,如果该主节点故障,则集群会自动选出新的主节点来替换故障节点。

node (节点):一个节点是集群中的一个 Elasticsearch 运行实例。测试环境,多个节点可以同时启动在同一个服务器上,生产环境一般是一个服务器上一个节点。节点启动时将使用单播或者是组播来发现和自己配置的集群名称相同的集群,并尝试加入到该集群中。

shard (分片):一个分片就是一个Lucene实例,它是 Elasticsearch 管理的底层 「工作单元」。一个索引是逻辑上的一个命名空间,指向主分片和副本分片。索引的主分片和副本分片数量必须明确指定好,在应用代码使用时只需要处理和索引的交互,不会涉及到和分片的交互。Elasticsearch 会在集群中的所有节点上设置好分片,但节点失效或加入新节点时会自动将移动节点分片。

primary shard (主分片):每个文档都会被保存在一个主分片上。当我们索引一个文档时,它将在一个主分片上进行索引,然后才放到该主分片的各副本分片上。默认情况下,一个索引有 5 个主分片。我们可以指定更少或更多的主分片来伸缩索引可处理的文档数。需要注意的是,一旦索引创建,就不能修改主分片个数

replica shard (副本分片):每个主分片可以拥有0个或多个副本分片,一个副本分片是主分片的一份拷贝。这样做有两个主要原因:

  • 故障转移:当主分片失效时,一个副本分片会被提升为主分片。
  • 提高性能:获取与搜索请求可以被主分片或副本分片处理。默认情况下,每个主分片都有一个副本分片,副本分片的数量可以动态调整。在同一个节点上,副本分片和其主分片不会同时运行。

单节点,三个主分片的原理图

两个节点,三个主分片,一个副本分片的原理图

三个节点,三个主分片,两个副本分片

索引中的主分片的数量在索引创建后就固定下来了,但是从分片的数量可以随时改变。

在ES集群中可以监控统计很多信息,其中最重要的就是:集群健康(cluster health)。它的 status 有 green、yellow、red 三种;

status意义
green所有主分片和从分片都可用
yellow所有主分片可用,但存在不可用的从分片
red存在不可用的主要分片

index (索引)一个索引类似关系型数据库中的一个数据库,它可以映射为多种type。一个索引就是逻辑上的一个命名空间,对应到1或多个主分片上,可以拥有0个或多个副本分片。

type (类型):表示一类相似的document。Type由名称(如orderinfo,refundinfo)和mapping组成。类似于数据库中的schema,描述了文档可能具有的字段或属性 、每个字段的数据类型—比如 string, integer 或 date — 以及Lucene是如何索引和存储这些字段的。类型可以很好的抽象划分相似但不相同的数据。每个document的类型名被存储在一个叫 _type 的元数据字段上

id:id 是用于标识文档的。文档 id 是自动生成的,如果显式不指定。

document (文档):一个文档就是一个保存在 Elasticsearch 中的 JSON 文本,可以把它理解为关系型数据库表中的一行。每个文档都是保存在索引中的,拥有一种type和 id。一个文档是一个 JSON Object (一些语言中的 hash / hashmap / associative array) 包含了 0 或多个field (键值对)。原始的 JSON 文本在索引后将被保存在 _source字段里,搜索完成后返回值中默认是包含该字段的。

document举例:
{
  "_index": "test_index",
  "_type": "test_type",
  "_id": "1",
  "_version": 1,
  "_source": {
    "test_field1": "test field1",
    "test_field2": "test field2"
  }
}

一个document不只包含了数据。它还包含了元数据(metadata) —— 关于文档的信息。有三个元数据元素是必须存在的,它们是:

名字说明
_index文档存储的地方
_type文档代表的对象种类
_id文档的唯一编号
文档通过 _index, _type以及_id来确定它的唯一性。
其余可选的元数据类型:
名字说明
_uid组合id,由_type和_id组成
_source文档的原始json数据,可以从这里获取每个字段的内容
_all整合所有字段内容到该字段,默认禁用

source field ( 源字段):默认情况下,在获取和搜索请求返回值中的 _source字段保存了 JSON 文本。这使得我们可以直接在返回结果中访问源数据,而不需要根据 id 再发一次检索请求。索引的 JSON 字符串将完整返回,无论是否是一个合法的 JSON。该字段的内容也不会描述数据如何被索引。

field (字段):一个文档包含了若干字段,或称之为键值对字段的值可以是简单标量值,例如字符串、整型、日期,也可以是嵌套结构,例如数组或对象。一个字段类似于关系型数据库表中的一列。每个字段的映射都有一个字段类型 ( 不要和文档类型搞混了 ),它描述了这个字段可以保存的值类型,例如整型、字符串、对象。mapping还可以让我们定义一个字段的值如何进行分析

字段类型:

一级分类二级分类具体类型
核心类型字符串类型string,text,keyword
整数类型integer,long,short,byte
浮点类型double,float,half_float,scaled_float
逻辑类型boolean
日期类型date
范围类型range
二进制类型binary
复合类型数组类型array
对象类型object
嵌套类型nested
地理类型地理坐标类型geo_point
地理地图geo_shape
特殊类型IP类型ip
范围类型completion
令牌计数类型token_count
附件类型attachment
抽取类型percolator

mapping (映射):就像数据库中的schema描述了文档可能具有的字段或属性,每个字段的数据类型以及Lucene是如何索引和存储这些字段的。Elasticsearch的mapping一旦创建,只能增加字段,而不能修改已经mapping的字段。修改mapping只能通过重新建立一个index,然后创建一个新的mapping。

设置mapping

POST /library                  #给索引为library创建映射关系

{

     "settings":{//分片的设置

     "number_of_shards" : 5,

     "number_of_replicas" : 1

      },

      "mappings":{

            "books":{          #索引为library的type类型为books

                "properties":{        #这里往下就是映射关系

                    "title":{"type":"string"},

                    "name":{"type":"string","index":"not_analyzed"},

                    "publish_date":{"type":"date","index":"not_analyzed"},

                    "price":{"type":"double"},

                    "number":{

                        "type":"object",

                        "dynamic":true

                     }

                  }

               }

         }

}

获取mapping

GET library/_mapping

{
   "library": {
      "mappings": {
         "books": {
            "properties": {
               "name": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "number": {
                  "type": "object",
                  "dynamic": "true"
               },
               "price": {
                  "type": "double"
               },
               "publish_date": {
                  "type": "date",
                  "format": "dateOptionalTime"
               },
               "title": {
                  "type": "string"
               }
            }
         }
      }
   }
}

term (查询词):一个查询词是一个被 Elasticsearch 索引的确切值。查询词 foo,Foo,FOO 是不同的。查询词可以使用查询词查询接口进行获取。

"query": {
    "term": {
      "age": "39"
    }
  }

类似的terms

 "query" : {
        "constant_score" : {
            "filter" : {
                "terms" : {
                    "price" : [20, 30]
                }
            }
        }
    }

analysis 分析:分析是将文本 ( text ) 转化为查询词 ( term ) 的过程。比如这三种短语:FOO BAR,Foo-Bar,foo,bar 都有可能被分解成查询词 foo 与 bar。可以使用不同的分析器,这些查询词实际上将被存储在索引中。一次对 FoO:bAR 的全文查询 ( 不是查询词查询 ) 可能会被分析为为查询词 foo,bar,可以匹配上保存在索引中的查询词。这就是分析处理过程(包含了索引与搜索),它使得 es 可以进行全文查询。

routing (路由):当我们索引一个document时,它将被保存在一个主分片上,分片的选择是通过路由值哈希得到的。默认情况下,路由值使用文档的 id,如果该文档指定了父文档,则路由值使用父文档 id。这是为了确保子文档和父文档被保存在相同的分片上。该值可以在索引时指定,也可以通过映射路由字段来指定。

当你索引一个文档,它被存储在单独一个主分片上。Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢?

进程不能是随机的,因为我们将来要索引文档。事实上,它根据一个简单的算法决定:

shard = hash(_routing) % number_of_primary_shards

_routing值是一个任意字符串,它默认是_id但也可以自定义。这个_routing字符串通过哈希函数生成一个数字,然后除以主分片的数量得到一个余数(remainder),余数的范围永远是0number_of_primary_shards - 1这个数字就是特定文档所在的分片

=============================================================================

与数据库概念的映射关系:

Elasticsearch

RDBMS

Elasticsearch

Relational DB

Indices(索引)

Databases

Types(类型)

Tables

Documents(文档)

Rows

Fields(字段)

Columns

转载于:https://my.oschina.net/liyurong/blog/1841888

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

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

相关文章

IntelliJ IDEA 运行 Maven 项目

1.官方文档说IntelliJ IDEA已经自身集成了maven,则不用劳心去下载maven 2.导入一个程序,看是否是maven程序的关键在于工程之中有没有pom.xml这个文件,比如这里 3.为这个工程配置好服务器3.1 点击“Edit Configurations”3.2 进入Run/Debug C…

资深老鸟整理,Java接口自动化测试总结,从0到1自动化...

这几年接口自动化变得越来越热门,相对比于UI自动化,接口自动化有一些优势 1)运行比UI更稳定,让BUG更容易定位 2)UI自动化维护成本太高,接口相对低一些 接口测试其实有很多方式,主要有两种&…

pdf 字体和图片抽取

2019独角兽企业重金招聘Python工程师标准>>> #安装mutoos sudo apt-get install mupdf-tools #抽取字体 mutool extract LTN20180531052_C.pdf 转载于:https://my.oschina.net/colin86/blog/1842412

扫盲丨关于区块链你需要了解的所有概念

扫盲丨关于区块链你需要了解的所有概念 如今存储信息的方式有什么问题? 目前,支配我们生活的数据大部分都储存在一个地方,不论是在私人服务器、云、图书馆或档案馆的纸上。大多数情况下这很好,但这也容易受到攻击。 最近有消息称&…

SpringBoot环境切换

2019独角兽企业重金招聘Python工程师标准>>> 1.在application.yml中配置,如果java -jar banke-boot-bd-api-0.0.1-SNAPSHOT.jar,那么就是已application-test作为启动的配置文件启动 spring: profiles: active: test 2.如果java -jar banke-bo…

[No0000B0]ReSharper操作指南1/16-入门与简介

安装指南 在安装之前,您可能需要检查系统要求。 ReSharper是一个VisualStudio扩展。它支持VisualStudio2010,2012,2013,2015和2017.安装完成后,您将在VisualStudio的主菜单中找到新的ReSharper条目。大多数ReSharper命令都可以在这个菜单中找到。但是&a…

数据结构学习笔记(一)——《大话数据结构》

第一章 数据结构绪论 基本概念和术语 数据 描述客观事物的符号,计算机中可以操作的对象,能被计算机识别并输入给计算机处理的符号的集合。包括整型、实型等数值类型和字符、声音、图像、视频等非数值类型。 数据元素 组成数据的、有一定意义的基本单位&a…

java的垃圾回收机制包括:主流回收算法和收集器(jvm的一个主要优化方向)

2019独角兽企业重金招聘Python工程师标准>>> java的垃圾回收机制是java语言的一大特色,解放了开发人员对内存的复杂控制,但如果你想要一个高级java开发人员,还是需要知道其机制,所谓不仅要会用还要知道其原理这样才能用…

@hot热加载修饰器导致static静态属性丢失(已解决)

react开发的时候,引入热加载,用了修饰器的引入方式,发现了一个很有意思的问题,网上并没有相关文章,所以抛出来探讨下。 一段很简单的测试代码。但是经过babel编码后,变得很有意思。假设编码成es2016&#x…

学习vue.js的自我梳理笔记

基本语法格式&#xff1a; <script> new Vue({ el: #app, data: { url: http://www.runoob.com } }) </script> 指令 【指令是带有 v- 前缀的特殊属性。】 判断 <p v-if"seen">现在你看到我了</p> 参数 <a v-bind:href"url"&…

Spring+jpaNo transactional EntityManager available

2019独角兽企业重金招聘Python工程师标准>>> TransactionRequiredException: No transactional EntityManager availableEntityManager执行以下方法(refresh, persist, flush, joinTransaction, remove, merge) 都需要需要事务if (transactionRequiringMethods.cont…

01_Struts2概述及环境搭建

1.Struts2概述&#xff1a;Struts2是一个用来开发MVC应用程序的框架。Struts2提供了web应用程序开发过程中一些常见问题的解决方案;对用户输入的数据进行合法性验证统一的布局可扩展性国际化和本地化支持Ajax表单的重复提交文件的上传和下载... ...2.Struts2相对于Struts1的优势…

高可用性、负载均衡的mysql集群解决方案

2019独角兽企业重金招聘Python工程师标准>>> 一、为什么需要mysql集群&#xff1f; 一个庞大的分布式系统的性能瓶颈中&#xff0c;最脆弱的就是连接。连接有两个&#xff0c;一个是客户端与后端的连接&#xff0c;另一个是后端与数据库的连接。简单如图下两个蓝色框…

剥开比原看代码09:通过dashboard创建密钥时,前端的数据是如何传到后端的?

2019独角兽企业重金招聘Python工程师标准>>> 作者&#xff1a;freewind 比原项目仓库&#xff1a; Github地址&#xff1a;https://github.com/Bytom/bytom Gitee地址&#xff1a;https://gitee.com/BytomBlockchain/bytom 在前面一篇文章&#xff0c;我们粗略的研究…

004. ES6之函数的扩展

2019独角兽企业重金招聘Python工程师标准>>> 1. 函数参数的默认值 ES6 允许为函数的参数设置默认值&#xff0c; function log(x, y World) {console.log(x, y); }log(Hello) // Hello World log(Hello, China) // Hello China log(Hello, ) // Hello// 1. 参数变量…

一名3年工作经验的程序员应该具备的技能

本文转自:https://m.imooc.com/article/details?article_id7557 前言 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结&#xff0c;因此有了这篇文章。这篇文章大部分内容都是面向整个程序员群体的&#xff0c;当然因为LZ本身是做Java开发的&#xff0c;因此有一部…

多语言版希尔排序

2019独角兽企业重金招聘Python工程师标准>>> 简介 希尔排序(Shells Sort)是插入排序的一种又称“缩小增量排序”&#xff08;Diminishing Increment Sort&#xff09;&#xff0c;是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L…

UML 中extend和include的区别

在UML用例图中有两种关系——包含和扩展&#xff0c;容易混淆&#xff0c;下面通过一张表来区别一下这两种关系。 转载于:https://www.cnblogs.com/yonyong/p/8555547.html

浏览器兼容CSS渐进增强 VS 优雅降级如何选择

由于低级浏览器不支持 CSS3&#xff0c;但是 CSS3 特效太优秀不忍放弃&#xff0c;所以在高级浏览器中使用CSS3&#xff0c;而在低级浏览器只保证最基本的功能。二者的目的都是关注不同浏览器下的不同体验&#xff0c;但是它们侧重点不同&#xff0c;所以导致了工作流程上的不同…

2018年,牛客网小白月赛5

第一次啊&#xff0c;补题&#xff0c;希望大佬批评。 题目按我补题顺序来的。 https://www.nowcoder.com/acm/contest/135#question H 题 最大公倍数 题意:给出两个数&#xff0c;求最大公倍数 欧几里德算法算出最大公约数k; 然后算出。最大公倍数即可 代码如下&#xff1a; …