Elasticsearch搜索优化-自定义路由规划(routing)

在es的实践学习中,我觉得它的文档是最好的老师,所以先把这部分链接贴出来,本文只是引导,文档全是细节,还是推荐大家事后认真看看文档

Metadata fields-routing

在es搜索中,请求是先分发到所有分片,然后聚合结果返回,如果我们将相同业务领域的数据聚集到同一个或者少部分分片,搜索的时候只搜索这几个分片,那么将会减少机器压力,提高搜索性能。

没有指定路由的情况

在没有指定路由的情况,所有的数据是依据文档_id(_routing的默认为_id),然后套公式均匀的分发到分片中,公式如下:

//我这边用的是7.9.3版本,我看7.17的公式多加了一个num_routing_shards参数,分片算法改进但本质结果没有变。
shard_num = hash(_routing) % num_primary_shards

从公式中我们可以看到id的不同必然导致文档会分散到不同的分片中,这就是没有自定义路由的普遍情况。

指定路由的情况

新建索引

如何指定路由要分析产品需求和数据上的相通性,就拿商品搜索来说,商品分布在不同的门店,而同一门店的商品可能会有列表搜索,有了这么一个需求,那么同一门店的商品是不是放在一个分片里是最好选择?

分析好需求以后我们确定了针对门店编码做路由,首先我们简单建立一个索引

PUT ***/routing{"settings": {"number_of_shards": "3","number_of_replicas": "3","index.routing_partition_size": "2","index.number_of_routing_shards": "3"},"mappings": {"_routing": {"required": true}}
}

除了指定了常见的分片数,副本数,还有两个新的参数index.routing_partition_size
index.number_of_routing_shards,

index.routing_partition_size

当使用了路由,可以让路由相同的文档分配到同一个分片上,从而减少查询时需要的分片数,提高查询效率。但是使用该参数容易导致数据不平衡。为此,ES还提供了一个index.routing_partition_size参数,用于将路由相同的文档映射到不止一个分片上,默认值是1,这样一方面可以减少查询的分片数,另一方面又可以在一定程度上防止分片数据不平衡。引入该参数后计算公式如下

shard_num = (hash(_routing) + hash(_id) % routing_partition_size) % num_primary_shards

这个参数只是对上面公式的进一步延申,我在索引参数中设置了2,说明在这个3个分片的索引中,路由相同的文档分配到其中2个分片上,后面我们导入数据时看看效果。

index.number_of_routing_shards

当在es中使用自定义路由时,路由分片的数量(number_of_routing_shards)决定了有多少分片用于路由。如果不指定此设置,则无论设置的分区大小(routing_partition_size)是多少,都只使用一个分片进行路由。为了确保正确实现分区大小,请将number_of_routing_shards设置为索引中的主分片数(number_of_shards)。这将确保根据指定的路由分片大小(number_of_routing_shards)使用预期数量的分片(number_of_routing_shards)进行路由。

在很多资料中,只提了routing_partition_size但是没有提number_of_routing_shards,如果不设置number_of_routing_shards,routing_partition_size的作用就会失效,这里着重强调,我在例子中设置了3,跟主分片数量一样。

Unique IDs with custom routing

其次,mappings里_routing的required值为true,会让使用自定义路由时,每当保存、获取、删除或更新文档时,都必须提供路由值,否则报错。我们要明白一点,如果不强制设置这个必填,会导致一条数据在多个分片中出现,没错,连_id都会一模一样,因为在es机制中,不同的路由值下的_id才必须是唯一的。这一条规则(Unique IDs with custom routing)文档也有写清。

导入数据

同一个routing随意导入若干条数据,看看数据分片的情况

插入数据

POST http://***/routing/_doc?routing=107U{"shopCode": "107U"
}

检查预期结果

查询分片情况:

GET 
http://***/_cat/shards/routing?v

可以看到在同一个路由的情况下,数据只分布在2个分片中,符合预期。

index   shard prirep state      docs store ip         node
routing 1     p      STARTED      13 5.1kb 10.6.11.20 node-2
routing 1     r      STARTED      13 5.1kb 10.6.11.20 node-1
routing 1     r      STARTED      13 5.1kb 10.6.11.20 node-3                     
routing 2     r      STARTED       7 4.8kb 10.6.11.20 node-2
routing 2     r      STARTED       7 4.8kb 10.6.11.20 node-1
routing 2     p      STARTED       7 4.8kb 10.6.11.20 node-3        
routing 0     r      STARTED       0  208b 10.6.11.20 node-2
routing 0     p      STARTED       0  208b 10.6.11.20 node-1
routing 0     r      STARTED       0  208b 10.6.11.20 node-3              

结语

自定义路由在用户了解查询需求和业务的基础之上,可以对查询性能进行优化,然而使用不当会导致数据不平衡,重复ID等问题。所以要充分了解其机制再去使用(这里再次推荐看下官方文档),避免反向优化。

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

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

相关文章

6月26~28日,2024北京国际消防展即将开幕!

随着社会的快速发展,消防安全日益受到广大民众的高度关注。为了进一步推动消防科技的创新与发展,提升全民消防安全意识,2024年北京消防展将于6月26日在北京国家会议中心盛大开展。目前:观众预登记已全面启动,广大市民和业界人士可…

马尔科夫性质-举例简单说明,马尔科夫模型和隐马尔科夫模型在自然语言处理方面应用是什么

目录 马尔科夫模型应用 马尔科夫性质,举例简单说明 马尔科夫模型 马尔科夫链 马尔科夫决策过程(Markov Decision Process, MDP) 例子 隐马尔科夫模型(Hidden Markov Model, HMM) 马尔科夫模型和隐马尔科夫模型在自然语言处理方面应用是什么 马尔科夫模型在自然语言…

SQLite3(1):介绍安装与测试

目录 1、SQLite3介绍 2、SQLite3的优势和特性 3、SQLite3安装与测试 3.1 SQLite3安装 3.2 SQLite3测试 4、SQLite3简单使用 4.1 连接数据库文件 4.2 创建信息表 4.3 插入三个学生信息 4.4 确认信息 5、总结 1、SQLite3介绍 SQLite3是一种轻量级的关系型数据库管理系…

论文阅读 A Distributional Framework for Data Valuation

本论文解决的问题 量化数据价值(机器学习模型训练中各个数据点的贡献) 避免数据价值受到其所处数据集的影响,使数据点的估值更加稳定、一致 变量假设 假设 D 表示一个在全集 Z 上的数据分布。对于监督学习问题,我们通常认为 Z…

jvm学习笔记(一) ----- JAVA 内存

JAVA 内存 一、程序计数器二、虚拟机栈三、本地方法栈四、堆五、非JAVA内存(堆外内存)1.元空间(Metaspace)2.直接内存 链接: jvm学习笔记(二) ----- 垃圾回收 链接: jvm学习笔记(三) ----- 垃圾回收器 一、程序计数器 虚拟机需要通过『程序计数器』记录指令执行到哪了。线程要…

代码随想录算法训练营day43

题目:1049. 最后一块石头的重量 II 、494. 目标和、474.一和零 参考链接:代码随想录 1049. 最后一块石头的重量 II 思路:本题石头是相互粉碎,粉碎后剩下的重量就是两块石头之差,我们可以想到,把石头分成…

使用智谱 GLM-4-9B 和 SiliconCloud 云服务快速构建一个编码类智能体应用

本篇文章我将介绍使用智谱 AI 最新开源的 GLM-4-9B 模型和 GenAI 云服务 SiliconCloud 快速构建一个 RAG 应用,首先我会详细介绍下 GLM-4-9B 模型的能力情况和开源限制,以及 SiliconCloud 的使用介绍,最后构建一个编码类智能体应用作为测试。…

数据结构和算法之数组和链表

一、数组 数组是一种线性数据结构,它是由一组连续的内存单元组成的,用于存储相同类型的数据。在JavaScript中,数组可以包含任意类型的数据,不只限于基本数据类型。 1.存储方式 在内存中,数组的元素是连续存储的&…

【Vue】组件的存放目录问题

注意: .vue文件 本质无区别 组件分类 .vue文件分为2类,都是 .vue文件(本质无区别) 页面组件 (配置路由规则时使用的组件)复用组件(多个组件中都使用到的组件) 存放目录 分类开来的…

Llama模型家族之拒绝抽样(Rejection Sampling)(二)均匀分布简介

LlaMA 3 系列博客 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (一) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (二) 基于 LlaMA 3 LangGraph 在windows本地部署大模型 (三) 基于 LlaMA…

ssti模板注入

一、Flask应用 1、介绍 定义 Flask:是一个使用Python编写的轻量级web应用框架。Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。 特点 良好的文档、丰富的插件、包含开发服务器和调试器、集成支持单元测试、RESTful请求调度、支持安全cookies、基于Unicode。 …

手机短信删除怎么恢复?快速找回的3个秘密武器

手机,这个我们每天离不开的小玩意儿,有时候也会让我们头疼不已。比如,你一不小心,或者为了清理点空间,就把那些重要的短信给删了。这些短信可能是你和好友的深夜聊天,或者是重要的工作信息。一旦删除&#…

人工智能就业方向有哪些?

人工智能就业方向有哪些? 随着人工智能技术的不断发展,其应用领域也越来越广泛。对于想要进入人工智能领域的年轻人来说,选择一个合适的职业方向是至关重要的。今天给大家介绍六个热门的人工智能就业方向,分别是机器学习工程师、自然语言处理…

Webshell检测初识

最近在研究webshell检测的小东西,所以开启一个专门记录webshell检测工具开发的专栏,若有遗漏之处,请大佬们指出。 本篇大致了解以下内容 什么是webshll?有哪些类型?各自有什么不同?Webshell有哪些常见的检测…

鼠标侧键映射虚拟桌面切换 —— Win11

鼠标侧键映射虚拟桌面切换 —— Win11 基于 AutoHotkey 实现功能 下载软件 AutoHotkey建议安装在默认路径下(C盘) 此软件非常小,几乎不占用资源软件安装在默认路径以外的位置可能导致部分功能不可用 新建一个 .ahk 文件使用记事本打开该 .a…

哪款开放式耳机佩戴最舒服?2024五款备受推崇产品分享!

​在现今耳机市场,开放式耳机凭借其舒适的佩戴体验和独特的不入耳设计,备受消费者追捧。它们不仅让你在享受音乐时,仍能察觉周围的声音,确保与人交流无障碍,而且有利于耳朵的卫生与健康。对于运动爱好者和耳机发烧友而…

GIGE 协议摘录 —— 引导寄存器(四)

系列文章目录 GIGE 学习笔记 GIGE 协议摘录 —— 设备发现(一) GIGE 协议摘录 —— GVCP 协议(二) GIGE 协议摘录 —— GVSP 协议(三) GIGE 协议摘录 —— 引导寄存器(四) GIGE 协议…

Flutter Dismissible 属性介绍及使用指南

在移动应用开发中,滑动删除是一种常见的交互方式。Flutter 提供了一个强大的小部件 Dismissible,使得实现这一功能变得非常简单。本文将介绍 Dismissible 的主要属性及其使用方法。 1. Dismissible 简介 Dismissible 是一个 Flutter 小部件&#xff0c…

前后端实现文件上传进度条-实时进度

后端接口代码&#xff1a; PostMapping("/upload")public ResponseEntity<String> handleFileUpload(RequestParam("file") MultipartFile file) {try {// 获取文件名String fileName file.getOriginalFilename();// 创建上传目标路径Path targetPa…

基于简单Agent对医疗数据进行分析

数据表 供应商资格审核规定.pdf 医生名录.xlsx 历史就诊记录.xlsx 患者信息名录.xlsx 药品.xlsx 药品库存管理.xlsx 采购单位基本信息.xlsx Agent测试 模型基于ChatGPT-3.5 问题&#xff1a;帮我找出不达标的供应商 Agent分析过程 [Thought: 0] Key Concepts: - 不达标的供…