推特 阿里云技术文档正文

推荐场景_使用范例_图数据库GDB

admin 阿里云技术文档 2020-02-11 189 0
阿里云服务器优惠

推荐场景

概述

在手机淘宝上购物时,手淘会有“猜你喜欢”页面推荐你可能会感兴趣的商品;使用优酷观看电影时,页面上也会推荐你可能喜欢的电影列表。个性化推荐的应用非常广泛,可以在帮助企业挖掘潜在的用户需求、提高转化率的同时,也有效提升用户体验。个性化推荐基于的数据集包括用户的历史行为习惯,商品、电影本身的属性等,这些数据之间是相互关联的,应用推荐策略时需要利用这些数据之间复杂的关联关系,所以使用图数据库来存储这些数据是非常合适的。

建模

下面以书籍的个性化推荐来例,来说明如何使用图数据库支持个性化推荐应用。

阿里云图数据库服务GDB目前支持的图模型是属性图,属性图将存储的基本元素分为点(Vertex)、边(Edge)和属性(Property),每个Vertex/Edge都有一个标签(Label)来代表它的类型。

在书籍个性化推荐中,我们可以定义如下的基本元素:

  • Vertex:书籍(Book)、出版商(Publisher)、作者(Author)、读者(Reader)
  • Edge:出版(Publish)、写作(Write)、打分(Score)
  • Property:名字(name)、类型(type)、年龄(age)、出版年份(year)

 推荐场景_使用范例_图数据库GDB 阿里云技术文档

代码

现在我们要给用户名为“小明”的读者推荐书籍,一个很直观的想法是“找到那些和小明评价过相同的书的读者,把他们评价过的其它书推荐给小明”。

阿里云图数据库服务GDB目前支持的查询语言是Gremlin,下面使用Gremlin语句来实现上面的需求:

  • 首先,我们找到小明
  1. g.V().hasLabel('Reader').has('name','小明')
  • 然后,找到小明评价过的书
  1. g.V().hasLabel('Reader').has('name','小明').as('myself').out('Score')
  • 然后,找到评价过这些书的其它人
  1. g.V().hasLabel('Reader').has('name','小明').as('myself').out('Score').aggregate('scored_books').in('Score').where(neq('myself'))
  • 最后,找到这些人看过的小明没有看过的书
  1. g.V().hasLabel('Reader').has('name','小明').as('myself').out('Score').aggregate('scored_books').in('Score').where(neq('myself')).out('Score').where(without('scored_books'))
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论

-----