马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
前置衔接文章:ElasticSearch第1讲(4万字详解 Linux下安装、原生调用、API调用超全总结、Painless、IK分词器、4种和数据库同步方案、高并发下一致性办理方案、Kibana、 ELK)
ElasticSearch集群
- 极简概括:多个ES节点组成的一个系统。
- 办理问题:
- 防止单点故障。
- 算力和容量负载均衡,用更多的节点来扩展集群的容量和性能。
- 实用场景:涉及大数据检索的系统,无固定场景,有需求就用。
- 优点:
- 防止单点故障,当集群内一个节点挂掉后,不影响集群使用,若master节点挂掉,ES集群也会自动选举master,并持续对外提供服务(主节点规复后就可能不在是主节点了,类似Redis的哨兵模式)
- 算力和容量负载均衡,用更多的节点来扩展集群的容量和性能。
- 高可用性:通过分片(Sharding)和副本(Replication)机制,ES可以或许包管数据的高可用性和容错性。即使某个节点出现故障,数据依然可以从其他副本中规复。
- 具有强大的分片与副本分布算法,开发人员不消刻意去维护。
- 缺点:
- 集群配置:对于配置集群,ES默认的配置文件并未提供充分的预留配置项,使得配置集群困难。
- 运维成本:多个节点不可避免的增长运维成本。
ES集群搭建(version 8.14.1)
- 搭建目标:192.168.0.183(master & data),192.168.0.183(data),192.168.0.183(data)。
- 系统配置:
- 都要做集群的,推荐修改以下配置,用于Linux系统对es性能优化。
- vim /etc/security/limits.conf
- 文末添加两行配置,优化文件描述符软硬限制,对提高性能非常重要,文件描述符用于标识和管理每个进程都可以打开文件的数量
- es soft nofile 65536
- es hard nofile 65536
- vim /etc/security/limits.d/20-nproc.conf
- 文末添加两行配置,优化文件描述符软硬限制,对提高性能非常重要,文件描述符用于标识和管理每个进程都可以打开文件的数量
- es soft nofile 65536
- es hard nofile 65536
- vim /etc/sysctl.conf
- 定义系统中可以同时打开的最大文件描述符数量。
- fs.file-max=655350
- 定义Linux内核中进程可以拥有的最大内存映射区域数量
- vm.max_map_count=262144
- 重启
- sysctl -p
复制代码- 注意配置格式,key: value之间要留出空格,否则ES不识别对应的值。
- 通过上一章,已经安装好了ES,并能跑起来。可在这个基础上配置ES集群
- vim ES根目录/config/elasticsearch.yml
- 找到---------------------------------- Cluster -----------------------------------段,修改以下内容
- 集群名称,一个集群下的节点,需要保持一致
- cluster.name: zs_es_cluster
- 找到------------------------------------ Node ------------------------------------段,修改以下内容
- 节点名称,每个节点名称必须不一样
- node.name: node_01
- 设置节点的角色,推荐只设置一个主节点
- node.roles: [master, data]
- 找到---------------------------------- Network -----------------------------------段,修改以下内容
- 配置IP
- network.host: 192.168.0.183
- 并添加一行端口
- transport.tcp.port: 9300
- 将光标指针移至文末,添加跨域配置
- http.cors.enabled: true
- http.cors.allow-origin: "*"
- http.max_content_length: 200MB
- 3行指令用于配置相关节点,以供服务发现
- discovery.seed_hosts: ["1节点IP:主节点集群端口",2节点IP:主节点集群端口,3节点IP:主节点集群端口]
- 这个设置启用TCP连接的keep-alive机制。启用keep-alive后,Elasticsearch会定期向连接的另一端发送探测包,以检查连接是否仍然有效。这有助于保持长时间未活动的连接处于活动状态,从而防止连接由于超时被意外关闭。
- network.tcp.keep_alive: true
- 这个选项禁用Nagle算法。Nagle算法用于减少网络上的小数据包的数量,但在实时系统中,它可能导致延迟。将network.tcp.no_delay设置为true可以确保数据包尽快发送,而不经过Nagle算法的延迟处理,有助于提高网络通信的实时性。
- network.tcp.no_delay: true
- 在----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------段,
- 若设置了
- xpack.security.enabled: true
- 请打开
- xpack.security.transport.ssl:
- enabled: true
- 否则报错bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch
- Esc wq保存并退出。
- chown -R es:es ES根目录
- 随后启动或重启ES,注意防火墙要打开指定的端口。
- 期间可用ps aux命令查看ES是否跑得起来。
- 通过curl访问ES,可直接查看对应的ES配置情况。
- curl IP:9200/_cluster/health
- 结果:
- {
- "cluster_name": "zs_es_cluster",
- "status": "green",
- "timed_out": false,
- "number_of_nodes": 3,
- "number_of_data_nodes": 3,
- "active_primary_shards": 7,
- "active_shards": 14,
- "relocating_shards": 0,
- "initializing_shards": 0,
- "unassigned_shards": 0,
- "delayed_unassigned_shards": 0,
- "number_of_pending_tasks": 0,
- "number_of_in_flight_fetch": 0,
- "task_max_waiting_in_queue_millis": 0,
- "active_shards_percent_as_number": 100.0
- }
- 1. cluster_name
- 含义:集群名称。
- 示例值:"zs_es_cluster"
- 用途:用于标识集群的名称,方便在管理和监控时识别。
- 2. status
- 含义:集群状态。
- 示例值:"green"
- 用途:指示集群的健康状态:
- green:所有主分片和副本分片都正常。
- yellow:所有主分片正常,但有副本分片未分配。
- red:有主分片未分配。
- 3. timed_out
- 含义:查询是否超时。
- 示例值:false
- 用途:指示查询请求是否因超时而失败。
- 4. number_of_nodes
- 含义:集群中的节点总数。
- 示例值:3
- 用途:显示集群中的总节点数。
- 5. number_of_data_nodes
- 含义:集群中的数据节点总数。
- 示例值:3
- 用途:显示处理数据存储和搜索的节点数。
- 6. active_primary_shards
- 含义:活跃的主分片数量。
- 示例值:7
- 用途:显示当前活跃的主分片总数。
- 7. active_shards
- 含义:活跃的分片总数(包括主分片和副本分片)。
- 示例值:14
- 用途:显示集群中活跃的所有分片的总数。
- 8. relocating_shards
- 含义:正在迁移的分片数量。
- 示例值:0
- 用途:显示当前正在迁移的分片数。迁移通常发生在节点故障或集群扩展时。
- 9. initializing_shards
- 含义:正在初始化的分片数量。
- 示例值:0
- 用途:显示正在初始化的分片数。初始化分片通常是在刚刚创建索引时发生的。
- 10. unassigned_shards
- 含义:未分配的分片数量。
- 示例值:0
- 用途:显示未分配的分片数。这通常表示在集群启动或索引创建时需要分配的分片。
- 11. delayed_unassigned_shards
- 含义:延迟未分配的分片数量。
- 示例值:0
- 用途:显示因延迟而未分配的分片数量。
- 12. number_of_pending_tasks
- 含义:待处理任务的数量。
- 示例值:0
- 用途:显示当前待处理的集群管理任务数量,例如分片分配或设置更改。
- 13. number_of_in_flight_fetch
- 含义:当前进行中的获取请求数量。
- 示例值:0
- 用途:显示当前正在进行的搜索请求数量。
- 14. task_max_waiting_in_queue_millis
- 含义:任务在队列中等待的最大时间(毫秒)。
- 示例值:0
- 用途:显示任务在队列中等待的最长时间。值为 0 表示没有任务等待。
- 15. active_shards_percent_as_number
- 含义:活跃分片的百分比。
- 示例值:100.0
- 用途:显示当前活跃的分片占总分片数的百分比。值为 100.0 表示所有分片都在正常工作中。
- 或者使用如下方式查看
- curl IP:9200/_cat/nodes?v
- 结果:
- ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
- 192.168.0.184 30 94 0 0.16 0.11 0.22 cdfhilmrstw - node_02
- 192.168.0.183 50 94 0 0.29 0.33 0.30 cdfhilmrstw * node_01
- 192.168.0.185 63 93 0 0.79 7.42 5.21 cdfhilmrstw - node_03
- 1. heap.percent
- 含义:JVM 堆内存的使用百分比。
- 用途:显示当前 JVM 堆内存的使用情况。高使用率可能表示需要增加内存或优化查询/索引操作。
- 2. ram.percent
- 含义:系统内存的使用百分比。
- 用途:显示节点系统内存的使用情况。用于监控内存压力,确保系统有足够的可用内存以避免性能问题。
- 3. cpu
- 含义:节点的 CPU 使用情况。
- 用途:显示节点的 CPU 使用情况。高 CPU 使用率可能表示节点在处理大量请求或需要优化配置。
- 4. load_1m
- 含义:过去 1 分钟的系统负载。
- 用途:显示系统的负载情况。负载值超过 CPU 核心数量可能表示系统负载较高,可能需要进一步调查。
- 5. load_5m
- 含义:过去 5 分钟的系统负载。
- 用途:显示系统的负载趋势。可以帮助识别长期的负载变化情况。
- 6. load_15m
- 含义:过去 15 分钟的系统负载。
- 用途:显示系统负载的长期趋势。可以用于分析系统负载的稳定性和变化趋势。
- 7. node.role
- 含义:节点角色。
- 用途:显示节点在集群中的角色,例如主节点(m)、数据节点(d)、协调节点(c)等。这帮助理解节点的功能和在集群中的作用。
- 8. master
- 含义:是否为主节点。
- 用途:显示节点是否是当前的主节点。主节点负责集群的管理和协调任务。
- 9. name
- 含义:节点名称。
复制代码
- 节点2、3配置基本同上,IP和节点名称需更改,并清空ES根目录/data,否则亲测节点无法发现,记得密码配置的要一致,客户端调用要输入用户名密码的,不一致会报错。
ES Head插件
- 原本是想通过Chrome加载该文件成为插件,但是报错,那就通过网页的形式使用。
- cd 插件目录
- npm i
- 然后手动打开插件目录下的index.html
复制代码 节点脚色(主节点、数据节点)
- 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
- 极简概括节点:就是每个服务器上的ES实例,在集群环境下的称呼。
- 极简概括节点脚色:集群环境下每个ES实例的工作侧重点,是通过脚色控制的。
- 分类:master、data、data_content、data_hot、data_warm、data_cold、data_frozen、ingest
、ml、remote_cluster_client、transform。这么多种类,目前可以或许用到的,就只有master、data节点。
- 主节点:就是master节点,用于控制集群。
- 主节点作用:
- 集群管理:主节点负责集群状态的管理和维护,包罗节点的加入和退出、索引的创建和删除等。
- 元数据管理:主节点管理集群的元数据,包罗索引和映射的信息。
- 和谐操作:主节点和谐分片的分配和再分配,确保数据的均衡和容错性。
- 处理集群状态更新:主节点负责更新集群状态,并将这些更新广播到所有数据节点。
- 若要把节点,配置为主节点,需要再elasticsearch.yml中配置
- node.roles: [master]
复制代码
- 数据节点:具有多个数据脚色之一的节点。数据节点生存数据并执行与数据干系的操作,如CRUD、搜索和聚合。具有泛型的节点data脚色可以担任任何专门的数据节点脚色。
- node.roles: [master, data]
复制代码 分片
- 极简概括:是将索引拆分成多个小的独立部分的过程。
- 类比MySQL:分表。
- 办理问题:
- 容量问题:几十亿的索引,单个节点装不下,就须要拆分。
- 性能提升:将数据分布到多个分片上,多个节点可以并行处理查询哀求,从而进步查询性能。
- 副本备份:防止单点故障引发的数据丢失问题。
- 实用场景:大数据下因存储问题(办理存储的问题),和高并发下因算力问题(办理性能的问题)。
- 优点:如上。
- 缺点:
- 不可避免的增长运维成本。
- 数据倾斜:因算法,大概数据本身的特点,让分片之间分布不均,从而造成负载不均衡。这种不均衡可能会影响整体性能和资源利用服从。
- 主分片:拆分后的分片数据,并非主节点的分配数据。留意分片数目,创建索引时就已经确定,默认是1个,之后也无法更改。
副本(或叫副本分片)
- 极简概括:分片的备份,分片的冗余。
- 对比分片:不是一个东西,分片是将源数据拆分成小部分,副本分片的备份。
- 分布模式:当有两台及以上数目的实例时,分片和对应的副本会放置在不同的服务器上,用来避免单节点故障引起的数据丢失。
节点扩容带来的问题
- 为什么要扩容:因存储不足大概算力不足的环境下,想通过扩容节点来办理。
- 问题:由于分片数目在创建索引时就已经确定(默认是1个,可手动更改),之后也无法更改。这会导致扩容会受节点数目牵制。
- 办理:分片数目无法热增长,但是副本分片却可以热增长(增大索引的number_of_replicas参数)。因为副本即分片,以是ES访问分片或副本可以。将副本分布在更多的节点上,吞吐量,就上来了。
- 换个说法:在增长节点的期间,增长副本数目,让更多的副本,均派在更多的节点上,从而增长算力并减轻存储压力。
- 留意:过多的副本,在ES写入数据时须要更长时间的同步,这会消耗肯定的资源。
节点、分片、副本的盘算、分布与演进
- 背景:我把他拿出来讲,是因为轻易肴杂。创建索引时,若设置number_of_shards为3,number_of_replicas为1。
- 则表示:
- number_of_shards为3:表示这个索引设置3个分片。起个名:也就是分片1,分片2,分片3。
- number_of_replicas为1:定义每个主分片有1个副本。3个分片,就会有3个副本,起个名:也就是副本1,副本2,副本3。
- 当节点数目为1时,则表示:
- 分片数目:3。
- 副本数目:3。
- 分片分布环境:分片1,分片2,分片3全部在这个单一节点上。
- 副本分布环境:副本1,副本2,副本3全部在这个单一节点上。若节点挂掉,源数据和备份有丢失风险,因此存在单点故障。
- 分布如图
- |--------节点1--------|
- | 分片1、分片2、分片3 |
- | 副本1、副本2、副本3 |
- |---------------------|
复制代码
- 演进,当节点数目为2时,则表示:
- 分片数目:3。
- 副本数目:3。
- 分片分布环境:分片1,分片2,分片3可能全部在这个节点1上,因为这样变动动用资源较少。
- 副本分布环境:副本1,副本2,副本3可能全部在这个节点2上,总之,分片和这个分片对应的副本,不能出现在同一个节点上,谨防单点故障。
- 分布如图
- 只要节点数量>=2,就不能再同一节点上出现存储分片n,又存储副本n的情况。
- |--------节点1--------|
- | 分片1、分片2、分片3 |
- |---------------------|
- |--------节点2--------|
- | 副本1、副本2、副本3 |
- |---------------------|
复制代码
- 演进,当节点数目为3时,则表示:
- 分片数目:3。
- 副本数目:3。这个3,表示的3个分片各会有1个副本,则产生3份副本。
- 分片分布环境:分片1和分片2可能在节点1上,分片3可能在节点3上。
- 副本分布环境:副本1和副本3可能在节点2上,副本2可能在节点3上。
- 分布如图:
- 只要节点数量>=2,就不能再同一节点上出现存储分片n,又存储副本n的情况。
- |-----节点1----|
- | 分片1、分片2 |
- |--------------|
- |-----节点2----|
- | 副本1、副本3 |
- |--------------|
- |-----节点3----|
- | 副本2、 分片3 |
- |--------------|
复制代码
- 当节点数目大于6时:
- 3个分片,那么加上3个分片对应的3份副本,一共就是6份数据,最多使用6个节点,以是节点不能超过6个,否则会产生多余的节点。
- 演进:number_of_replicas为2,number_of_shards为3,且节点数目为3,则表示:
- 分片数目:3。
- 副本数目:6。
- 分片分布环境:可能分片1,分片2在节点1上,分片3在节点3上。
- 副本分布环境:可能副本3_1在节点1,副本1、副本2、副本3_1在节点2,副本1_1、副本2_1、分片3在节点3。
- 分布如图
- 只要节点数量>=2,就不能再同一节点上出现存储分片n,又存储副本n的情况。
- |----------节点1----------|
- | 分片1、分片2、副本3 |
- |------------------------|
- |----------节点2----------|
- | 副本1、副本2、副本3_1 |
- |-------------------------|
- |----------节点3----------|
- | 副本1_1、副本2_1、分片3 |
- |------------------------|
复制代码 路由
- 极简概括:指的是如何将文档定位到详细的分片上的策略。
- 作用:帮忙在读写时快速定位详细的分片。
- 过程:文档的ID颠末哈希盘算,并通过固定的分片数目取模,根据得到的值决定用哪个分片。
- 策略:默认是用轮询节点的方式进行路由。
- 分类:
- 内置路由:ES使用文档ID的哈希值取模分片数目来盘算其存储的分片位置,并自动定位分片。
- 自定义路由:用户提供一个routing参数,这个参数可以是任意的字符串值,ES将使用这个值j颠末哈希后取模来进行路由盘算。
集群内数据的读写流程
- 写流程
- 客户端发送写哀求:客户端向ES集群中的某个节点发送写哀求,这个节点会作为本次哀求的和谐节点(Coordinating Node)。
- 路由到准确的分片:和谐节点使用文档ID的哈希值来确定文档属于哪个分片,并通过集群状态中的内容路由表信息获知该分片的主分片位置。
- 主分片写入:和谐节点将写哀求转发到主分片所在的节点,由主分片执行现实的写操作。
- 主从复制:如果主分片写入成功,它会将哀求并行转发到所有的副本分片(Replica Shard)所在的节点,等候副本分片写入成功。这是为了包管数据的冗余和一致性。
- 确认写入成功:一旦所有副本分片都成功写入了数据,主分片节点会向和谐节点报告成功,随后和谐节点向客户端返回写入成功的相应(有例外)。
- 读流程
- 客户端发送读哀求:客户端向ES集群中的某个节点发送读哀求,这个节点同样会作为本次哀求的和谐节点。
- 确定数据和副本信息:和谐节点使用文档ID的哈希值来确定文档属于哪个分片,并通过集群状态中的内容路由表信息获知该分片的副本信息。
- 转发哀求到副本节点:和谐节点可以将读哀求转发到有副本分片的任意节点进行读取。在现实操作中,为了负载均衡,和谐节点可能会采用轮询的方式将哀求分发到不同的副本节点。
- 返回数据给客户端:处理读哀求的节点将数据返回给和谐节点,随后和谐节点将数据返回给客户端。
- 和谐节点:负责处理集群内哀求并将其分发到合适数据节点的节点。和谐节点不直接存储数据或索引,而是负责处理哀求的路由。
故障转移带来的影响
- 增补:这里的故障转移,指的是某个节点挂掉后,对集群本身和调用端的影响。
- 脚色:若master挂掉,集群会从其他可用的节点中选出来一个作为master,若老master规复,则不在是master脚色。
- 分片与副本分布:节点挂掉后,意味着节点数目发生了变革,就算再次启动,分片与副本分布可能会与原先的不一样。
- 调用端:只要节点不全部挂掉,访问速度会变慢,但支持正常访问。
客户端调用集群的方案
- composer require elasticsearch/elasticsearch
- 新建PHP文件,以下代码数据为公共部分。
- include './vendor/autoload.php';
- use Elastic\Elasticsearch\ClientBuilder;
- //连接ES主节点
- $client = ClientBuilder::create()->setHosts(['192.168.0.183:9200', '192.168.0.184:9200', '192.168.0.185:9200'])
- ->build();
- //若es有密码,则需要添加一个setBasicAuthentication()方法,各节点密码须一致。
- $client = ClientBuilder::create()->setHosts(['192.168.0.183:9200', '192.168.0.184:9200', '192.168.0.185:9200'])
- ->setBasicAuthentication('elastic', '123456')->build();
复制代码 分片与副本设置指标
<ul>容量考虑:控制每个分片占用的硬盘容量,不超过ES最大JVM的堆空间设置(一般设置不超过32G),如果索引的总容量在500G大小,那分片设置16个即可。
节点考虑:避免让单个节点存储多个分片,一旦出现了故障(参考上文 “演进,当节点数目为3时”(不知道这句话在那里直接Ctrl F搜))仍旧有丢失数据的可能,一般的分片数目,不会超过节点数的3倍。
公式:节点数 'shards_test', 'body' => [ 'settings' => [ 'number_of_shards' => 3, //创建3个分片 'number_of_replicas' => 1 //每个分片有1个副本 ] ]];$response = $client->indices()->create($params);dd($response->asBool());[/code]
- 删:不支持的操作,可通过建立新的索引去实现。
- 改:不支持的操作,可通过建立新的索引去实现。
- 查:
- 返回bool
- $params = [
- 'index' => 'shards_test',
- 'body' => [
- 'settings' => [
- 'number_of_shards' => 3, //创建3个分片
- 'number_of_replicas' => 1 //每个分片有1个副本
- ]
- ]
- ];
- $response = $client->indices()->create($params);
- dd($response->asBool());
复制代码 副本增删改查
- 返回array
- $params = [
- 'index' => 'shards_test',
- 'format' => 'json'
- ];
- $response = $client->cat()->shards($params);
- dd($response->asArray());
- array:6 [
- 0 => array:9 [
- "index" => "shards_test"
- "shard" => "0"
- "prirep" => "r"
- "state" => "STARTED"
- "docs" => "0"
- "store" => "227b"
- "dataset" => "227b"
- "ip" => "192.168.0.185"
- "node" => "node_03"
- ]
- 1 => array:9 [
- "index" => "shards_test"
- "shard" => "0"
- "prirep" => "p"
- "state" => "STARTED"
- "docs" => "0"
- "store" => "227b"
- "dataset" => "227b"
- "ip" => "192.168.0.183"
- "node" => "node_01"
- ]
- 2 => array:9 [
- "index" => "shards_test"
- "shard" => "1"
- "prirep" => "p"
- "state" => "STARTED"
- "docs" => "0"
- "store" => "227b"
- "dataset" => "227b"
- "ip" => "192.168.0.185"
- "node" => "node_03"
- ]
- 3 => array:9 [
- "index" => "shards_test"
- "shard" => "1"
- "prirep" => "r"
- "state" => "STARTED"
- "docs" => "0"
- "store" => "227b"
- "dataset" => "227b"
- "ip" => "192.168.0.184"
- "node" => "node_02"
- ]
- 4 => array:9 [
- "index" => "shards_test"
- "shard" => "2"
- "prirep" => "p"
- "state" => "STARTED"
- "docs" => "0"
- "store" => "227b"
- "dataset" => "227b"
- "ip" => "192.168.0.184"
- "node" => "node_02"
- ]
- 5 => array:9 [
- "index" => "shards_test"
- "shard" => "2"
- "prirep" => "r"
- "state" => "STARTED"
- "docs" => "0"
- "store" => "227b"
- "dataset" => "227b"
- "ip" => "192.168.0.183"
- "node" => "node_01"
- ]
- ]
- index: 索引的名称。在这个例子中,索引名称是 shards_test。
- shard: 分片的编号。"0"表示这是索引的第一个主分片。
- prirep: 分片的类型。"r"表示这是一个副本分片(“r” 是“replica”的缩写)。主分片的标识是 "p"。
- state: 分片的状态。"STARTED"表示该分片已成功启动并处于活动状态。
- docs: 分片中的文档数量。"0"表示当前分片中没有文档。
- store: 分片占用的存储空间大小。"227b"表示这个分片的大小为227字节。
- dataset: 这个字段通常不在标准的 _cat/shardsAPI输出中,可能是某个自定义的监控系统中的字段。在这里它和 store 的值相同,即 227b。
- ip: 托管该分片的节点的IP地址。在这个例子中是192.168.0.185。
- node: 托管该分片的节点名称。在这个例子中是node_03。
复制代码- 返回bool
- $params = [
- 'index' => 'shards_test',
- 'body' => [
- 'settings' => [
- 'number_of_shards' => 3, //创建3个分片
- 'number_of_replicas' => 1 //每个分片有1个副本
- ]
- ]
- ];
- $response = $client->indices()->create($params);
- dd($response->asBool());
复制代码- 返回bool
- $params = [
- 'index' => 'shards_test',
- 'body' => [
- 'settings' => [
- 'number_of_replicas' => 0
- ]
- ]
- ];
- $response = $client->indices()->putSettings($params);
- dd($response->asBool());
复制代码- $params = [
- 'index' => 'shards_test',
- 'body' => [
- 'settings' => [
- 'number_of_replicas' => 2 //自定义数量
- ]
- ]
- ];
- $response = $client->indices()->putSettings($params);
- dd($response->asBool());
复制代码 自定义路由干系增删改查
- 返回array
- 同节点查看操作
- $params = [
- 'index' => 'shards_test',
- 'format' => 'json'
- ];
- $response = $client->cat()->shards($params);
- dd($response->asArray());
复制代码
- 增:不支持的操作。路由是个字符串,用于哈希盘算分片的参数标识,自定义路由本身没有添加的意义,可参与创建数据。
- $params = [
- 'index' => 'route_test',
- 'body' => [
- 'mappings' => [
- 'properties' => [
- 'test_field' => [
- 'type' => 'text',
- 'index' => true
- ]
- ]
- ],
- 'settings' => [
- 'number_of_shards' => 3,
- 'number_of_replicas' => 1
- ]
- ]
- ];
- $response = $client->indices()->create($params);
- dd($response->asBool());
复制代码
- 删:不支持的操作。路由是个字符串,用于哈希盘算分片的参数标识,自定义路由本身没有删除的意义,可参与删除数据。
- 返回bool
- $params = [
- 'index' => 'route_test',
- 'id' => '1',
- 'body' => [
- 'test_field' => 'C语言是世界上最好的编程语言',
- ],
- 'routing' => 'share_01' //自定义路由标识
- ];
- $response = $client->index($params);
- dd($response->asBool());
复制代码
- 改:不支持的操作。路由是个字符串,用于哈希盘算分片的参数标识,自定义路由本身没有更改的意义,可参与更新数据。
- $params = [
- 'index' => 'route_test',
- 'id' => '1',
- 'routing' => 'share_01' //若使用其它的路由,则无法命中,导致删除出现异常报错
- ];
- try {
- $response = $client->delete($params);
- } catch (\Exception $exception) {
- //异常兜底操作
- dd($exception->getMessage());
- }
- dd($response->asBool());
复制代码
- 查:不支持的操作。路由是个字符串,用于哈希盘算分片的参数标识,自定义路由本身没有查询的意义,可参与查询数据。
- 返回bool
- $params = [
- 'index' => 'route_test',
- 'id' => '1',
- 'body' => [
- 'doc' => [
- 'test_field' => 'C是世界上最好的编程语言'
- ]
- ],
- 'routing' => 'share_01' //若使用其它的路由,则无法命中,导致更新出现异常报错
- ];
- try {
- $response = $client->update($params);
- } catch (\Exception $exception) {
- //异常兜底操作
- dd($exception->getMessage());
- }
- dd($response->asBool());
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |