GraphGists

美食家指南

“生活中成功的秘诀之一就是吃你喜欢的食物 - 马克·吐温”

我认为我们每个人都喜欢吃饭,是的,我知道有些人天生就喜欢吃得过多。在这个 GraphGist 中,我们将看到图模型如何让你更接近你最喜欢的食物。我通常一天喝 6-7 杯茶/咖啡,有些人称之为咖啡因成瘾,但谁在乎呢。接下来,我们将看到**Neo4j 如何带你前往城市中最好的自助餐或拿铁咖啡馆**

nerd quote technology download food

美食家模型

以下是我们的美食家模型,每家餐厅都由一个节点表示。请注意,餐厅按区域分组,**IndiraNagar 有星巴克咖啡和 Beanstalk**,**Frazer Town 有 Savoury 餐厅。**另一件重要的事情是,我在 Neo4j 模型中将每种餐厅提供的食物都表示为一个节点,因为我们的大多数查询都需要快速搜索餐厅提供的食物。

model
  • 餐厅提供的每种食物将具有以下属性

    1. 食物名称

    2. 价格

    3. 评分

    4. 评论

通过存储每道菜的评分和评论,我们可以轻松地找出在城市/地区吃“X”菜的最佳地点。假设你正在计划一个派对,你想邀请你的朋友参加自助餐,所以你开始搜索找出参加自助餐的最佳地点,当然是在你的预算范围内。


在大多数情况下,一家餐厅以其“X”或“Y”菜而闻名,而不是以其所有菜肴而闻名。因此,存储每道菜的评分和评论比仅在餐厅整体级别存储更有意义。


使用上述 Neo4j 模型,我们可以非常轻松地回答所有这些问题。我们已经花了很长时间讨论 Cypher 了,让我们在太空中抛出一些节点吧

设置

//Bangalore City

create (bangalore:City{city:"Bangalore"})

// Locations around city - Koramangala, IndiraNagar, Richmond Town, Jayanagar, Frazer Town

create (koramangala:Location{location:"Koramangala"}),
       (koramangala)-[:in]->(bangalore),
       (indiraNagar:Location{location:"IndiraNagar"}),
       (indiraNagar)-[:in]->(bangalore),
       (richmondTown:Location{location:"Richmond Town"}),
       (richmondTown)-[:in]->(bangalore),
       (jayanagar:Location{location:"Jayanagar"}),
       (jayanagar)-[:in]->(bangalore),
       (frazerTown:Location{location:"Frazer Town"}),
       (frazerTown)-[:in]->(bangalore)


// Black Pearl, Koramangala

create (blackPearl:Restaurant{name:"The Black Pearl",address:"Koramangala 5th Block",contactNumber:"080-49652187"}),
       (blackPearl)<-[:at]-(koramangala),
       (blackPearlBuffet:Buffet{name:"Buffet",price:1000,rating:6,comments:["Buffet is ok","Not that good as heared"]}),
       (blackPearl)-[:serves]->(blackPearlBuffet)


// Blu Petal, Koramangala

create (bluPetal:Restaurant{name:"Buff Buffet Buff - BluPetal Hotel",address:"Koramangala 5th Block",contactNumber:"080-49652556"}),
       (bluPetal)<-[:at]-(koramangala),
       (bluPetalBuffet:Buffet{name:"Buffet",price:800,rating:7.5,comments:["Buffet is good with some crispy starters","Ambience is not big but food is awesome"]}),
       (bluPetal)-[:serves]->(bluPetalBuffet)

// Barleyz, Koramangala

create (barleyz:Restaurant{name:"Barleyz",address:"Koramangala 6th Block",contactNumber:"080-49653421"}),
       (barleyz)<-[:at]-(koramangala),
       (barleyzBuffet:Buffet{name:"Buffet",price:1000,rating:7,comments:["Buffet is good but service is very bad","Food is just OK","Good place for dinner"]}),
       (barleyz)-[:serves]->(barleyzBuffet)

// Beanstalk, IndiraNagar

create (beansTalk:Restaurant{name:"Beanstalk",address:"80 Feet Road, Indiranagar",contactNumber:"080-65358858"}),
       (beansTalk)<-[:at]-(indiraNagar),
       (beansTalkLatte:Latte{name:"Latte",price:70,rating:8,comments:["The perfect cup of Latte","I can be found here on Sunday"]}),
       (beansTalk)-[:serves]->(beansTalkLatte)

// Cafe Coffee Day, IndiraNagar

create (ccd80Feet:Restaurant{name:"Cafe Coffee Day",address:"80 Feet Road, Indiranagar",contactNumber:"9243601943"}),
       (ccd80Feet)<-[:at]-(indiraNagar),
       (ccd80FeetLatte:Latte{name:"Latte",price:90,rating:7,comments:["Same as other CCDs","Ambience is good, good place to enjoy a cup of coffee"]}),
       (ccd80Feet)-[:serves]->(ccd80FeetLatte)

// Starbucks Coffee, IndiraNagar

create (starBucks:Restaurant{name:"Starbucks Coffee",address:"100 Feet Road, Indiranagar",contactNumber:"8884678529"}),
       (starBucks)<-[:at]-(indiraNagar),
       (starBucksBlueberryMuffin:Muffin{name:"Blueberry Muffin",price:140,rating:9,comments:["I love Starbucks Blueberry Muffin"]}),
       (starBucks)-[:serves]->(starBucksBlueberryMuffin),
       (starBucksChocolateMuffin:Muffin{name:"Java Chip Chocolate Muffin",price:145,rating:9,comments:["Perfect place for Muffin lovers"]}),
       (starBucks)-[:serves]->(starBucksChocolateMuffin),
       (starBucksWhiteChocolate:Chocolate{name:"White Hot Chocolate",price:130,rating:9,comments:["Great combination of white chocolate and steamed milk"]}),
       (starBucks)-[:serves]->(starBucksWhiteChocolate),
       (starBucksCappuccino:Cappuccino{name:"Cappuccino",price:155,rating:10,comments:["Probably the best place for Cappuccino lovers"]}),
       (starBucks)-[:serves]->(starBucksCappuccino),
       (starBucksEspresso:Espresso{name:"Espresso",price:110,rating:8,comments:["Similar to CCD"]}),
       (starBucks)-[:serves]->(starBucksEspresso),
       (starBucksLatte:Latte{name:"Latte",price:180,rating:10,comments:["Perfect cup of latte, may be a bit costly but worth every penny"]}),
       (starBucks)-[:serves]->(starBucksLatte)

// Lazeez Restaurant, Koramangala

create (lazeez:Restaurant{name:"Lazeez",address:"Koramangala 5th Block",contactNumber:"080-49653192"}),
       (lazeez)<-[:at]-(koramangala),
       (lazeezMuttonBiryani:MuttonBiryani{name:"Mutton Biryani",price:175,rating:9,comments:["How non vegeterian live, awesome mutton Biryani"]}),
       (lazeez)-[:serves]->(lazeezMuttonBiryani),
       (lazeezChickenBiryani:ChickenBiryani{name:"Chicken Biryani",price:165,rating:7,comments:["Their Chicken Biryani is not as good as Mutton Biryani"]}),
       (lazeez)-[:serves]->(lazeezChickenBiryani),
       (lazeezChickenIrani:ChickenIrani{name:"Chicken Irani",price:155,rating:8,comments:["I liked it"]}),
       (lazeez)-[:serves]->(lazeezChickenIrani),
       (lazeezMuttonStew:MuttonStew{name:"Mutton Stew",price:165,rating:8,comments:["A perfect mutton stew"]}),
       (lazeez)-[:serves]->(lazeezMuttonStew)

// Hyderabad Biryani House, Richmond Town

create (hyderabadBiryaniHouse:Restaurant{name:"Hyderabad Biryani House",address:"Richmond Town",contactNumber:"080-65979401,080-65979203"}),
       (hyderabadBiryaniHouse)<-[:at]-(richmondTown),
       (hBHMuttonBiryani:MuttonBiryani{name:"Mutton Biryani",price:190,rating:8,comments:["Good place to have mutton biryani","Their Victoria Road shop is much better than their other outlets"]}),
       (hyderabadBiryaniHouse)-[:serves]->(hBHMuttonBiryani),
       (hBHChickenBiryani:ChickenBiryani{name:"Chicken Biryani",price:180,rating:7,comments:["Their Chicken Birynai is not as good as their Mutton Biryani"]}),
       (hyderabadBiryaniHouse)-[:serves]->(hBHChickenBiryani),
       (hBHMuttonMughlai:MuttonMughlai{name:"Mutton Mughlai",price:220,rating:8,comments:["I love their mutton biryani and mughlai mutton","Only problem is ambience"]}),
       (hyderabadBiryaniHouse)-[:serves]->(hBHMuttonMughlai)

// Savoury Restaurant, Frazer Town

create (savoury:Restaurant{name:"Savoury Restaurant",address:"Mosque Road, Frazer Town",contactNumber:"080-49336333"}),
       (savoury)<-[:at]-(frazerTown),
       (savouryMuttonBiryani:MuttonBiryani{name:"Mutton Biryani",price:170,rating:10,comments:["Their Mutton Biryani taste is bit different than others, very good place to overeat, good ambience and parking facility"]}),
       (savoury)-[:serves]->(savouryMuttonBiryani),
       (savouryMuttonChops:MuttonChops{name:"Mutton Chops",price:240,rating:9,comments:["Perfect place for non vegeterians, wide variety of dishes including arabian, thai, indian and chinese"]}),
       (savoury)-[:serves]->(savouryMuttonChops)

// Shivaji Military Hotel, Jayanagar

create (sjMilitaryHotel:Restaurant{name:"Shivaji Military Hotel",address:"8th Block, Jayanagar",contactNumber:"9845149217,9980739217"}),
       (sjMilitaryHotel)<-[:at]-(jayanagar),
       (militaryHotelMuttonBiryani:MuttonBiryani{name:"Mutton Biryani",price:175,rating:10,comments:["Awesomest place to have mutton biryani in Bangalore","They beat everyone, best place for biryani"]}),
       (sjMilitaryHotel)-[:serves]->(militaryHotelMuttonBiryani),
       (militaryHotelChickenBiryani:ChickenBiryani{name:"Chicken Biryani",price:150,rating:9,comments:["I love their chicken biryani, very old hotel. At lunch time, its hard to find place to sit"]}),
       (sjMilitaryHotel)-[:serves]->(militaryHotelChickenBiryani),
       (militaryHotelNattyChickenBiryani:NattyChickenBiryani{name:"Natty Chicken Biryani",price:175,rating:9,comments:["Superb Natty Chicken Biryani, they have maintaned their taste"]}),
       (sjMilitaryHotel)-[:serves]->(militaryHotelNattyChickenBiryani)

// Meghana Foods, Koramangala

create (meghana:Restaurant{name:"Meghana Foods",address:"Koramangala 5th Block",contactNumber:"080-49653429"}),
       (meghana)<-[:at]-(koramangala),
       (meghanaMuttonBiryani:MuttonBiryani{name:"Mutton Biryani",price:265,rating:9,comments:["Heared a lot of this place, very good Biryani"]}),
       (meghana)-[:serves]->(meghanaMuttonBiryani),
       (meghanaChickenBiryani:ChickenBiryani{name:"Chicken Biryani",price:215,rating:8,comments:["As good as their Mutton Biryani"]}),
       (meghana)-[:serves]->(meghanaChickenBiryani),
       (meghanaPrawnsBiryani:PrawnsBiryani{name:"Prawns Biryani",price:275,rating:8,comments:["Among very few places where you can get prawns Biryani"]}),
       (meghana)-[:serves]->(meghanaPrawnsBiryani),
       (meghanaChillyPaneer:ChillyPaneer{name:"Chilly Paneer",price:195,rating:7,comments:["It was good"]}),
       (meghana)-[:serves]->(meghanaChillyPaneer)

见解

是时候获得一些有趣问题的答案了。

星巴克咖啡,IndiraNagar 提供什么?请提供他们的价格、评分和评论

match  (bangalore:City{city:"Bangalore"})<-[:in]-(indiraNagar:Location{location:"IndiraNagar"}),
       (indiraNagar)-[:at]->(restaurant:Restaurant{name:"Starbucks Coffee"}),
       (restaurant)-[:serves]->(eatable)
return eatable.name AS Menu,eatable.price AS Price,eatable.rating AS Rating,eatable.comments AS Comments;

请提供 IndiraNagar 所有餐厅的列表,以及地址和联系电话

match  (bangalore:City{city:"Bangalore"})<-[:in]-(indiraNagar:Location{location:"IndiraNagar"}),
       (indiraNagar)-[:at]->(restaurant:Restaurant)
return restaurant.name AS Restaurant,restaurant.address AS Address,restaurant.contactNumber AS Contact_Number;

Koramangala 的哪些餐厅提供自助餐?请提供餐厅名称、自助餐价格、评分和评论

match  (bangalore:City{city:"Bangalore"})<-[:in]-(koramangala:Location{location:"Koramangala"}),
       (koramangala)-[:at]->(restaurant:Restaurant),
       (restaurant)-[:serves]->(buffet:Buffet)
return restaurant.name AS Restaurant,buffet.price AS Price,buffet.rating AS Rating,buffet.comments AS Comments;

IndiraNagar 附近哪些餐厅提供 120 卢比内的拿铁咖啡?

match  (bangalore:City{city:"Bangalore"})<-[:in]-(indiraNagar:Location{location:"IndiraNagar"}),
       (indiraNagar)-[:at]->(restaurant:Restaurant),
       (restaurant)-[:serves]->(latte:Latte)
	  where latte.price <= 120
return restaurant.name AS Restaurant,restaurant.address AS Address,latte.price AS Price,latte.rating AS Rating,latte.comments AS Comments;

人们普遍对星巴克咖啡,IndiraNagar,班加罗尔有什么评价?

match  (bangalore:City{city:"Bangalore"})<-[:in]-(indiraNagar:Location{location:"IndiraNagar"}),
       (indiraNagar)-[:at]->(restaurant:Restaurant{name:"Starbucks Coffee"}),
       (restaurant)-[:serves]->(eatable)
return eatable.comments AS Starbucks_Comments;

星巴克咖啡,IndiraNagar,班加罗尔提供的卡布奇诺咖啡顾客评价如何?

match  (bangalore:City{city:"Bangalore"})<-[:in]-(indiraNagar:Location{location:"IndiraNagar"}),
       (indiraNagar)-[:at]->(restaurant:Restaurant{name:"Starbucks Coffee"}),
       (restaurant)-[:serves]->(cappuccino:Cappuccino)
return cappuccino.comments AS Starbucks_Cappuccino_Reviews;

比较星巴克咖啡,IndiraNagar 和 Beanstalk,IndiraNagar 的拿铁咖啡

match  (bangalore:City{city:"Bangalore"})<-[:in]-(indiraNagar:Location{location:"IndiraNagar"}),
       (indiraNagar)-[:at]->(starbucks:Restaurant{name:"Starbucks Coffee"}),
       (indiraNagar)-[:at]->(beanstalk:Restaurant{name:"Beanstalk"}),
       (starbucks)-[:serves]->(sLatte:Latte),
       (beanstalk)-[:serves]->(bLatte:Latte)
return sLatte.rating AS Starbucks_Latte_Rating,sLatte.price AS Starbucks_Price,sLatte.comments AS Starbucks_Comments,bLatte.rating AS Beanstalk_Latte_Rating,bLatte.price AS Beanstalk_Price,bLatte.comments AS Beanstalk_Comments;

班加罗尔的哪些餐厅提供羊肉 Biryani?请提供他们的地址、评分、价格和顾客评论

match  (bangalore:City{city:"Bangalore"})<-[:in]-(area:Location),
       (area)-[:at]->(restaurant:Restaurant),
       (restaurant)-[:serves]->(muttonBiryani:MuttonBiryani)
return restaurant.name AS Restaurant,area.location AS Area,restaurant.address AS Address,muttonBiryani.rating AS Rating,muttonBiryani.price AS Price;

请提供提供羊肉 Biryani 的餐厅列表,并根据评分降序排列,价格升序排列

match (bangalore:City{city:"Bangalore"})<-[:in]-(area:Location),
      (area)-[:at]->(restaurant:Restaurant),
      (restaurant)-[:serves]->(muttonBiryani:MuttonBiryani)
return restaurant.name AS Restaurant,area.location AS Area,restaurant.address AS Address,muttonBiryani.rating AS Rating,muttonBiryani.price AS Price
order by Rating DESC, Price ASC

星巴克咖啡,IndiraNagar 200 卢比以下提供什么?请提供按价格排序的列表

match  (bangalore:City{city:"Bangalore"})<-[:in]-(indiraNagar:Location{location:"IndiraNagar"}),
       (indiraNagar)-[:at]->(restaurant:Restaurant{name:"Starbucks Coffee"}),
       (restaurant)-[:serves]->(eatable)
	 where eatable.price <= 200
return eatable.name as Menu,eatable.price AS Price,eatable.rating AS Rating,eatable.comments AS Comments
order by Price ASC

还可以做些什么?

你可以继续添加你的果汁店、汤店、茶摊、路边摊。你甚至可以添加一些额外的属性,例如菜系,这将让你查询特定菜系的特定菜肴。假设你想吃你最喜欢的辣椒鸡,但你想在一些中餐厅(中国菜)吃。你甚至可以添加餐厅的营业时间,以及你能想到的任何其他内容。

我对图数据库,特别是 Neo4j 的看法

图模型确实为你提供了一些有趣问题的答案。不,我们不会抨击关系数据库,你也可以在其他数据库中设计类似的东西。但我真正喜欢图数据库,特别是 Neo4j 的一点是,你可以真正将你的查询可视化为一个逐步的方法来达到最终结果,并且**这一切都是可能的,因为一切都相互关联。**很高兴看到一些大公司和初创公司正在使用 Neo4j,我在我附近发现了一家 Wooplr

Mahtab 在大量茶的帮助下创建