餐厅推荐
餐厅推荐:引言

我们希望演示将领域建模为图并在几乎自然语言中回答问题是多么容易。
基于图的搜索和发现是像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 (nyc:City {name:'New York'})<-[:LOCATED_IN]-(restaurant)-[:SERVES]->(cuisine)
RETURN nyc, restaurant, cuisine
此查询应向我们展示纽约 City 的节点和关系,在该 City 的2家 LOCATED_IN 餐厅,以及每家餐厅 SERVES 寿司 Cuisine。
推荐标准
要回答这个问题,我们需要找到起点 - Philip需要推荐,所以他的节点是我们在图中开始搜索的地方。现在我们需要根据问题中的以下标准确定在图的哪些部分进行搜索
-
找到Philip和他的朋友
-
找到位于纽约的餐厅
-
找到提供寿司菜肴的餐厅
-
找到Philip的朋友喜欢的餐厅
推荐查询
根据这些标准,我们构建此查询
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
这告诉我们,Philip的2个朋友推荐iSushi餐厅的寿司,他的1个朋友推荐Zushi Zam餐厅的寿司。
此页面有帮助吗?