ElasticSearch文档操作介绍三

ElasticSearch文档的操作

文档存储位置的计算公式:

shard = hash(routing) % number_of_primary_shards

上面公式中,routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值。 routing 通过 hash 函数生成一个数字,然后这个数字再除以 number_of_primary_shards (主分片的数量)后得到 余数 。这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置。

这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了。

所有的文档 API( get 、 index 、 delete 、 bulk 、 update 以及 mget )都接受一个叫做 routing 的路由参数 ,通过这个参数我们可以自定义文档到分片的映射。一个自定义的路由参数可以用来确保所有相关的文档——例如所有属于同一个用户的文档——都被存储到同一个分片中。

ElasticSearch中,新建、删除、索引文档都属于写操作,必须在主分片上面完成之后才能被复制到相关的副本分片。

写一个文档:

下图是官网的一个例子,假设集群中有三个节点,一个索引,两个主分片,每个主分片有两个副本。写操作一个文档的过程如下:

1、客户端向 Node 1 发送新建、索引或者删除请求。
2、节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3`,因为分片 0 的主分片目前被分配在 `Node 3 上。
3、Node 3 在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2 的副本分片上。一旦所有的副本分片都报告成功, Node 3 将向协调节点(接受客户端请求的节点)报告成功,协调节点向客户端报告成功。

在客户端收到成功响应时,文档变更已经在主分片和所有副本分片执行完成,变更是安全的。

读一个文档:

检索(读取)一个文档时,可以从主分片或者其他任意副本分区检索。

以下是从主分片或者副本分片检索文档的步骤顺序:

1、客户端向 Node 1 发送获取请求。

2、节点使用文档的 _id 来确定文档属于分片 0 。分片 0 的主、副分片存在于所有节点上。 在这种情况下,它将请求转发到 Node 2 。

3、Node 2 将文档返回给 Node 1 ,然后将文档返回给客户端。

在处理读取请求时,协调结点在每次请求的时候都会通过轮询所有的副本分片来达到负载均衡。

在文档被检索时,已经被索引的文档可能已经存在于主分片上但是还没有复制到副本分片。 在这种情况下,副本分片可能会报告文档不存在,但是主分片可能成功返回文档。 一旦索引请求成功返回给用户,文档在主分片和副本分片都是可用的。

部分更新一个文档:

 

以下是部分更新一个文档的步骤:

1、客户端向 Node 1 发送更新请求。
2、它将请求转发到主分片所在的 Node 3 。
3、Node 3 从主分片检索文档,修改 _source 字段中的 JSON ,并且尝试重新索引主分片的文档。 如果文档已经被另一个进程修改,它会重试步骤 3 ,超过 retry_on_conflict 次后放弃。
4、如果 Node 3 成功地更新文档,它将新版本的文档并行转发到 Node 1 和 Node 2 上的副本分片,重新建立索引。 一旦所有副本分片都返回成功, Node 3 向协调节点也返回成功,协调节点向客户端返回成功。

原文地址:https://www.cnblogs.com/ahaii/p/8297507.html

时间: 2024-08-07 14:57:12

ElasticSearch文档操作介绍三的相关文章

Elasticsearch(文档操作)--添加

首先创建测试索引 接下来创建文档 创建完成回到 Elasticsearch-head 中查看 其中 ignore_above": 256, 超过 256个字符 使用text 否者使用 keyword 进行检索 点击 数据浏览 查看刚添加的文档信息 如果添加时不指定ID的话 es 会自动生成主键 http://192.168.1.200:9200/my_doc/_doc 注:如果索引没有手动建立mappings,那么当插入文档数据的时候,会根据文档类型自动设置属性类型.这个就是es的动态映射,帮我

ElasticSearch文档-简单介绍

ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.支持通过HTTP使用JSON进行数据索引.我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的.我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,

[第三章]文档操作的命令-更新....

一.针对文档操作的命令 一般对文档操作的命令比较常用:cat.less.head.tail.grep.cut.sort.wc.uniq.tee.tr.split.sed.awk 其中 grep.sed.awk是正则表达式必须掌握的工具 (1) cut 命令 cut命令用来截取某一个字段,其格式为:“cut -d ‘分隔符’ [-cf] n” ,这里的"n" 是数字,这个命令拥有以下选项 -d        <==后面跟分割字符,分割字符要用单引号括起来 -c        <

elasticsearch文档、索引的CRUD操作

elasticsearch概念 1. 集群:一个或者多个节点组织在一起 2. 节点:一个节点是集群中的一个服务器,有一个名字来标识,默认是一个随机的漫威角色的名字 3. 分片:将索引划分为多份的能力,允许水平分割和扩展容量,多个分片响应请求,提高性能和吞吐量 4. 副本:创建分片的一份或者多分的能力,在一个节点失败其余节点可以顶上 elasticsearch与mysql对应关系 index(索引) --- 数据库 type(类型) --- 表 documents(文档) --- 行 fields

电商项目实战(架构七)——Mongodb实现文档操作

一.前言 对于频繁读写的功能,例如商品的浏览记录,Mongodb中的添加.删除.查询可以很好的解决.Mongodb是为快速开发互联网Web应用而构建的数据库系统,其数据模型和持久化策略就是为了构建高 读/写 吞吐量和高自动灾备伸缩性的系统. 二.Mongodb的安装和使用(windows系统下) 1.下载Mongodb安装包,下载地址:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-3.2.21-signed.

ExtJs4学习(二):Dom文档操作

现在主流的JS框架要数ExtJs和JQuery应用的比较广泛.JQuery属于轻量级的,一般做网站应用比较常见,可见块头小的优势.ExtJs比较庞大,它除了对基本的JS语法和HTML DOM操作方式的封装之外,还提供了一套强大的UI库.在企业级B/S解决方案应用上独占优势.就单说它在原生JS的封装,DOM操作方式封装方面也足以藐视JQuery.下面我就通过对比API,体现两种框架的异曲同工之处.我们已JQuery API为主线,来看看ExtJs是否有替代的方案. 注意一点:ExtJs4.0相对上

elasticsearch 文档

elasticsearch 文档 安装篇 elasticsearch的安装非常简单,下载后,直接 ./bin/elasticsearch 启动就可以了.(在linux有些坑,比如linux版本低会报警,root不能启动,需要新建用户.新建用户要给操作elasticsearch的权限等等..) 官网 https://www.elastic.co 注意如果使用插件的话,要下载5.0版本,配kibana的5.0版本.否则各种不兼容.下载地址https://www.elastic.co/start 启动

dom文档操作-学习

今天出门,发现家猫,吐在我的鞋子上.猫猫觉得我不紧要当铲屎官还要当擦鞋官啊. 上次用css和html做了个防站酷的静态首页后,觉得现在改学学文档操作了.上w3c看了下文档操作. 大致理解操作步骤, 1.通过浏览器window对象,获取里面的熟悉document,这个表示当前文档对象, 2.获取document后,document里面有三个核心方法:getElementByClass,getElementByName,getElementByTag,姑且称为getElement三兄弟吧. 3.然后

httpd主配置文档的介绍及小练习

一.httpd 主配置文档的介绍/etc/httpd/conf/httpd.conf ### Section 1: Global Environment 全局环境 ServerRoot "/etc/httpd" 主服务程序在这个目录下 PidFile run/httpd.pid Pid 在主服务目录下的这个文件 Timeout 60 超时时间为60秒 KeepAlive Off 持久连接关闭 MaxKeepAliveRequests 100 最大连接数 KeepAliveTimeout