GraphGists

餐厅推荐:简介

restaurant recommendation model

我们希望展示将领域建模为图并以接近自然语言的方式回答问题的简单性。

基于图的搜索和发现是像 Neo4j 这样的图数据库的一个突出的用例。

在这里,我们使用一个提供菜肴并位于城市中的餐厅领域。

领域图是使用 Arrows 工具 创建的。

设置:创建朋友、餐厅、城市和菜肴

我们将创建一个小型示例图,其中包含人们喜欢的菜肴以及提供这些菜肴的餐厅。我们的人们在同一个社交圈(朋友关系)中,因此我们可以根据他们的社交联系和他们的偏好来创建其他人喜欢的菜肴和餐厅的推荐。

CREATE (philip:Person {name:"Philip"})-[:IS_FRIEND_OF]->(emil:Person {name:"Emil"}),
       (philip)-[:IS_FRIEND_OF]->(michael:Person {name:"Michael"}),
       (philip)-[:IS_FRIEND_OF]->(andreas:Person {name:"Andreas"})
CREATE (sushi:Cuisine {name:"Sushi"}), (nyc:City {name:"New York"}),
       (iSushi:Restaurant {name:"iSushi"})-[:SERVES]->(sushi),(iSushi)-[:LOCATED_IN]->(nyc),
       (michael)-[:LIKES]->(iSushi),
       (andreas)-[:LIKES]->(iSushi),
       (zam:Restaurant {name:"Zushi Zam"})-[:SERVES]->(sushi),(zam)-[:LOCATED_IN]->(nyc),
       (andreas)-[:LIKES]->(zam)

菲利普的朋友

首先,让我们查看一些图数据并找到谁是菲利普的朋友。

MATCH (philip:Person {name:'Philip'})-[:IS_FRIEND_OF]-(person)
RETURN person.name

我们应该在我们的图中看到菲利普的 3 位朋友 - 安德里亚斯、迈克尔和埃米尔。

纽约市的餐厅及其菜肴

现在让我们看看餐厅以及它们所在的城市以及它们提供的菜肴。

MATCH (nyc:City {name:'New York'})<-[:LOCATED_IN]-(restaurant)-[:SERVES]->(cuisine)
RETURN nyc, restaurant, cuisine

此查询应该向我们显示纽约市的City节点和关系,以及位于该城市的 2 家餐厅LOCATED_IN,以及每家餐厅SERVES寿司Cuisine

图搜索推荐

sushi restaurants nyc

现在我们已经了解了数据的样子,我们可以开始根据连接我们的人、地点、菜肴和餐厅的关系来推荐事物。

我们希望通过回答以下问题为菲利普提供建议

“查找菲利普的朋友喜欢的纽约寿司餐厅。”

推荐标准

要回答这个问题,我们需要找到我们的起点 - 菲利普需要推荐,因此他的节点是我们开始在图中搜索的地方。现在我们需要确定使用问题中的以下标准来搜索图的哪些部分

  • 查找菲利普及其朋友

  • 查找位于纽约餐厅

  • 查找提供寿司菜肴的餐厅

  • 查找菲利普的朋友喜欢的餐厅

推荐查询

根据这些标准,我们构建此查询

MATCH (philip:Person {name: 'Philip'}),
      (philip)-[:IS_FRIEND_OF]-(friend),
      (restaurant:Restaurant)-[:LOCATED_IN]->(:City {name: 'New York'}),
      (restaurant)-[:SERVES]->(:Cuisine {name: 'Sushi'}),
      (friend)-[:LIKES]->(restaurant)
RETURN restaurant.name as restaurantName, collect(friend.name) AS recommendedBy, count(*) AS numberOfRecommendations
ORDER BY numberOfRecommendations DESC

这告诉我们,菲利普的 2 位朋友推荐 iSushi 餐厅供应寿司,而他的一位朋友推荐 Zushi Zam 餐厅供应寿司。

更多关于推荐

更大的图和更深的关系路径可以为推荐引擎增加复杂性和功能。此示例展示了使用网络中的关系来推荐产品、爱好、服务、相似之处等等的构建这些系统的初始步骤和逻辑。