餐厅推荐
设置:创建朋友、餐厅、城市和菜肴
我们将创建一个小型示例图,其中包含人们喜欢的菜肴以及提供这些菜肴的餐厅。我们的人们在同一个社交圈(朋友关系)中,因此我们可以根据他们的社交联系和他们的偏好来创建其他人喜欢的菜肴和餐厅的推荐。
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 (nyc:City {name:'New York'})<-[:LOCATED_IN]-(restaurant)-[:SERVES]->(cuisine)
RETURN nyc, restaurant, cuisine
此查询应该向我们显示纽约市的City
节点和关系,以及位于该城市的 2 家餐厅LOCATED_IN
,以及每家餐厅SERVES
寿司Cuisine
。
推荐标准
要回答这个问题,我们需要找到我们的起点 - 菲利普需要推荐,因此他的节点是我们开始在图中搜索的地方。现在我们需要确定使用问题中的以下标准来搜索图的哪些部分
-
查找菲利普及其朋友
-
查找位于纽约的餐厅
-
查找提供寿司菜肴的餐厅
-
查找菲利普的朋友喜欢的餐厅
推荐查询
根据这些标准,我们构建此查询
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 餐厅供应寿司。
此页面是否有帮助?