五十六、Elasticsearch数据建模--实现join关联查
2017-07-21 本文已影响168人
编程界的小学生
1、案例背景
博客网站,我们会模拟各种用户发表各种博客,然后针对用
户和博客之间的关系进行数据建模,同时针对建模好的数据执行各种搜索/聚合操作
2、数据准备
新增一个用户
POST /website/users
{
"id" : 1,
"name" : "小鱼儿",
"email" : "xiaoyuer@sina.com",
"birthday" : "1980-01-01"
}
新增两个博客
POST /website/blogs
{
"id" : 1,
"title" : "我的第一篇博客",
"content" : "这是我的第一篇博客,开通啦!!!",
"userId" : 1
}
POST /website/blogs
{
"id" : 2,
"title" : "ES基本操作",
"content" : "ES的增删改查",
"userId" : 1
}
上面一个用户对应多个博客,一对多的关系做了建模。
3、需求
搜索小鱼儿发表的所有博客
4、实现
(1)先查出小鱼儿这个人的id
GET /website/users/_search
{
"query": {
"match": {
"name.keyword": "小鱼儿"
}
},
"_source": "id"
}
(2)根据上面的id去查询博客
GET /website/blogs/_search
{
"query": {
"match": {
"userId": 1
}
}
}
5、优点和缺点
优点:数据不冗余,维护方便
缺点:应用层join,如果关联数据过多,导致查询过大,性能很差。(比如说你要一次查询1万个用户的所有博客,你需要先查出1万个用户id,然后再去查1个用户拥有哪些博客)
若有兴趣,欢迎来加入群,【Java初学者学习交流群】:458430385,此群有Java开发人员、UI设计人员和前端工程师。有问必答,共同探讨学习,一起进步!
欢迎关注我的微信公众号【Java码农社区】,会定时推送各种干货:
qrcode_for_gh_577b64e73701_258.jpg