elasticsearchElasticsearch玩转大数据

五十六、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
上一篇下一篇

猜你喜欢

热点阅读