Elasticsearch做到像mysql这样的表连接Parent-Child实现

比如在mysql中我有两张表,movies和ratings,这两张表依赖movie_id实现关联。
那么我需要在elasticsearch中实现一下两个任务

  • 电影标题为When Will I Be Loved的电影评分的均值是多少
  • 电影评分大于5的电影标题是什么
    可以看出来这两个问题都需要将movies和ratings这两张表表连接以后再进行查询。但是Elasticsearch不支持在查询的时候使用movies.movie_id=ratings.movie_id实现两张表的连接,在Elasticsearch的做法是使用Parent-Child实现定义好父文档与子文档。可以理解为例如movie_id为1的数据在movies表中成为父文档,在ratings中成为子文档。

定义索引结构以及定义父子关系

DELETE /movies_ratings_indePUT /movies_ratings_index
{"mappings": {"properties": {"movie_id": {"type": "keyword"},"movie_title": {"type": "keyword"}}}
}PUT /movies_ratings_index/_mapping
{"properties": {"rating_score": {"type": "float"},"movie_id": {"type": "keyword"}}
}# ratings就是表连接,其中movie是父,rating是子
PUT /movies_ratings_index/_mapping
{"properties": {"movie_id": {"type": "keyword"},"movie_title": {"type": "keyword"},"ratings": {"type": "join","relations": {"movie": "rating"}}}
}

导入数据,我这里父数据定义了两条,movie_id分别是1和2,子数据定义了多个。


POST /movies_ratings_index/_doc/1
{"movie_id": "1","movie_title": "When Will I Be Loved","ratings": {"name": "movie"}
}POST /movies_ratings_index/_doc/2
{"movie_id": "2","movie_title": "When Will I Be Disdained","ratings": {"name": "movie"}
}POST /movies_ratings_index/_doc/3?routing=1
{"rating_score": 4.5,"movie_id": "1","ratings": {"name": "rating","parent": "1"}
}
POST /movies_ratings_index/_doc/4?routing=1
{"rating_score": 6.5,"movie_id": "1","ratings": {"name": "rating","parent": "1"}
}POST /movies_ratings_index/_doc/5?routing=1
{"rating_score": 36.5,"movie_id": "1","ratings": {"name": "rating","parent": "1"}
}
POST /movies_ratings_index/_doc/6?routing=1
{"rating_score": 26.5,"movie_id": "1","ratings": {"name": "rating","parent": "1"}
}POST /movies_ratings_index/_doc/7?routing=1
{"rating_score": 16.5,"movie_id": "1","ratings": {"name": "rating","parent": "1"}
}POST /movies_ratings_index/_doc/8?routing=2
{"rating_score": 50,"movie_id": "2","ratings": {"name": "rating","parent": "2"}
}

问题1:使用has_parent,因为我们这里是对父数据的movie_title字段进行筛选数据。

#使用has_parent查询
GET /movies_ratings_index/_search
{"query": {"has_parent": {"parent_type": "movie","query": {"match": {"movie_title": "When Will I Be Loved"}}}},"aggs": {"avg_rating_score": {"avg": {"field": "rating_score"}}}
}

问题2:使用has_child,因为我们这里是对孩子数据进行筛选。

#使用has_child查询
GET /movies_ratings_index/_search
{"query": {"has_child": {"type": "rating","query": {"range": {"rating_score": {"gt": 6}}}}},"aggs": {"movies_with_high_ratings": {"terms": {"field": "movie_title.keyword","size": 10  // 返回前10个最频繁出现的电影标题}}}
}

到这里能发现,就是说要想在elasticsearch中实现mysql的表连接操作必须要事先定义好父子关系,除此之外还要我这里只提到了两张表之间的关系,那么更多表的连接需要如何操作呢

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

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

相关文章

服务调用中的异常处理方案

背景 在微服务架构中,A服务调用B服务,当B服务中抛出异常时,我们的意愿是能够获取到所有的异常信息,并且可以触发服务的熔断降级。 但由于全局异常处理机制的存在,会帮我们处理B服务中抛出的异常,并把HTTP的状态码设置为200,那么此时对A服务来说,对B服务抛出的异常是无…

在线抠图网站

https://pixian.ai/ 这个网站提供一键去除图像背景的智能抠图服务。 水印去除剂 - 删除照片中的任何水印 该网站是一个智能抠图工具,可以帮助用户去除照片中的水印。 HAMA | AI Object remover, Image Eraser 这是一个智能抠图AI工具的网站,可以帮助…

电商平台接口自动化框架实践||电商API数据采集接口

电商数据采集接口 语言:python 接口自动化实现流程 红色为可实现/尚未完成 绿色为需要人工干预部分 自动生成测试用例模板(俩种方式二选一): mimproxy,通过浏览器代理抓包方式,访问 H5 或者 web 页面&a…

processing完整教程

概述:processing在我眼里就是libgdx的高度封装,如果各位会libgdx,学processing应该可以说是无师自通,当然processing是java语言那边的。 processing是什么? 官网是这样解释的:Processing 是一本灵活的软件…

PTA 6-2 入侵者围剿第二关2情报解密

经过上一步,已经创建了2个分队的情报信息链,现在需要将2个分队的情报进行合并,并删除重复值,合并后的情报信息确保唯一性。 假定上一步输入的情报信息是有序的,现在是合并2个有序链表。 函数接口定义: 第…

每周一算法:无向图的最小环

题目链接 观光之旅 题目描述 给定一张无向图,求图中一个至少包含 3 3 3 个点的环,环上的节点不重复,并且环上的边的长度之和最小。 该问题称为无向图的最小环问题。 你需要输出最小环的方案,若最小环不唯一,输出…

core.sshd.xxxxxx文件过大

背景 【紧急】【应用分组】应用: 接入点服务, 分组: 观众预发, ip: xx.xx.xx.xx 【/】,磁盘使用率已连续2次大于90% [当前值:100%]。报警时间: 2024-05-13 14:07:01 原因 登录机器查看,发现根目录下有大量的崩溃文件将 / 打满 处理 1, 删…

C#链接数据库、操作sql、选择串口

// 公共增删方法 using MySql.Data.MySqlClient; using System.Data; namespace ****** {public class MySQLHelper{private MySqlConnection conn null;private MySqlCommand comm null;private MySqlDataReader reader null;/// <summary>/// 构造方法里建议连…

【图解计算机网络】TCP 重传、滑动窗口、流量控制、拥塞控制

TCP 重传、滑动窗口、流量控制、拥塞控制 TCP 重传超时重传快速重传 滑动窗口流量控制拥塞控制慢启动拥塞避免拥塞发生快速恢复 TCP 重传 TCP重传是当发送的报文发生丢失的时候&#xff0c;重新发送丢失报文的一种机制&#xff0c;它是保证TCP协议可靠性的一种机制。 TCP重传…

二级Java第五套真题(乱序版)含真题解析

一. 单选题(共39题,39分) 1. (单选题, 1分) 阅读下列代码 public class Test implements Runnable { public void run (Thread t) { System.out.println("Running."); } public static void main (String[ ] args) { T…

mysql 离线安装

package download mysql https://dev.mysql.com/downloads/mysql/ libaio http://mirror.centos.org/centos/7/os/x86_64/Packages/libaio-0.3.109-13.el7.x86_64.rpm 根据自己服务器选择下载对应的安装包及依赖 删除本机自带mysql相关 # 首先排查服务器自身是否有安装对应m…

威胁建模的艺术:了解网络安全风险的另一面

网络安全的本质是攻防双方的对抗与博弈。然而&#xff0c;由于多种攻防之间的不对称性因素存在&#xff0c;使得攻击者总能在对抗过程中抢占先机。为了更好地了解潜在的威胁和缺陷&#xff0c;实现主动式防御&#xff0c;企业需要重新考虑他们的网络防护方法&#xff0c;而威胁…

【数据库】基础概念

1. linux中启动mysql服务器的命令是&#xff1a;service mysql start 2. linux中停止mysql服务器的命令是&#xff1a;service mysql stop 3. linux中重启mysql服务器的命令是&#xff1a;service mysql restart 4. linux中查看mysql服务器运行状态的命令是&#xff1a;serv…

抖音小店怎么运营才能出单呢?就这一个步骤做好,爆单不是梦!

哈喽~我是电商月月 新手做抖音小店绝对会有这两个问题&#xff1a;怎么运营&#xff1f;不出单怎么办&#xff1f;被这两个问题困扰着的商家&#xff0c;别着急&#xff01; 看完我这一篇分享&#xff0c;你就知道自己的问题所在了&#xff01; 抖音小店的运营中&#xff0c…

【工程师的自我修养】有效沟通

虽然大家都会说话&#xff0c;但不是每个人都会沟通。工作中不可避免的要与他人接触&#xff0c;沟通在工作中非常重要&#xff0c;沟通到位则事事顺畅&#xff0c;沟通不到位则举步维艰。 1、先说结论&#xff0c;再说过程 英语的语法习惯先说结论&#xff0c;I have lunch at…

30xx 51xx 请求指定地址配对连接

<?xml version="1.0" encoding="utf-8"?> <ConfigSet HwVariant="QCC3034-AA_DEV-BRD-R2-AA" SwVariant="Headset-Gaming"> <DefineGroup> <DefineBlockList> <enum …

找不到msvcp100.dll,无法继续执行代码的问题详细解析

当您在运行某个程序或游戏时遇到提示“找不到msvcp100.dll&#xff0c;无法继续执行代码”&#xff0c;这通常意味着系统中缺失了一个重要的动态链接库文件&#xff0c;从而导致应用程序无法正常启动。为了解决这个问题&#xff0c;本文将介绍5种常见的解决方法&#xff0c;帮助…

法国签证照片尺寸怎么调整?图片调整尺寸的方法介绍

在我们的平时生活中&#xff0c;个人证件照是我们必不可少的身份证明&#xff0c;它是一种具有严格尺寸和比例要求的特殊照片&#xff0c;对于一些特定的场合&#xff0c;比如我们在申请法国签证的时候&#xff0c;需要把照片调整到规定的大小尺寸&#xff0c;那么&#xff0c;…

数字人实训室助推元宇宙人才培养

如今&#xff0c;全身动作捕捉设备已经大量应用在影视、动画、游戏领域&#xff0c;在热门的元宇宙内容领域中&#xff0c;全身动作捕捉设备逐步发挥着重要的作用&#xff0c;在包括体育训练、数字娱乐虚拟偶像、虚拟主持人、非物质文化遗产保护等等场景&#xff0c;数字人实训…

通过任意文件读取获取weblogic账号密码

对于weblogic获取到账号密码的前提是有任意文件读取存在&#xff0c;当任意文件读取存在时是可以读取配置文件来对账号密码进行解密。weblogic密码使用AES&#xff08;老版本3DES&#xff09;加密&#xff0c;对称加密可解密&#xff0c;只需要找到用户的密文与加密时的密钥即可…