本月风味– Neo4j和Heroku
基本上,您可以將這些配料很好地搭配在一起-知道哪種配料具有風(fēng)味親和力,可以制作出一些令人贊嘆的新菜。
該應(yīng)用程序允許您添加具有“親和力”的配對-它們配對的程度如何-并搜索成分以查找與之配對的其他成分。
該應(yīng)用程序是使用Grails 2.0前端構(gòu)建的,可視化是非常簡潔的d3.js庫的結(jié)果,并且與Neo4j的交互是通過Neo4j REST Api完成的。
整個程序都部署在Heroku(帶有Neo4j附加組件)上,而源代碼可以在github上找到。
要開始使用Grails 2.0,Neo4j附加組件和Heroku,請閱讀有關(guān)主題的Aldrins帖子: http ://thought-bytes.blogspot.in/2012/02/grails-20-heroku-and-neo4j-addon.html
自述文件中介紹了如何在本地以及在Heroku上部署Flavorwocky。
該模型非常適合于圖表-如您所見,它非常簡單:
每個類別都有顏色編碼-為方便起見,它作為屬性存儲在類別節(jié)點(diǎn)上,但是當(dāng)然不必如此。
Flavorwocky也被選為該挑戰(zhàn)的基礎(chǔ),因?yàn)樗菆D形的真實(shí)世界用例,我希望本條目真正專注于Neo4j,而不是支持風(fēng)鈴。
設(shè)定
當(dāng)應(yīng)用程序啟動時,我們檢查數(shù)據(jù)庫是否為空。 為此,我們從參考節(jié)點(diǎn)執(zhí)行遍歷 ,以查找與其連接的任何類別。 如果沒有,則我們先創(chuàng)建類別集,方法是先創(chuàng)建類別的節(jié)點(diǎn) ,然后創(chuàng)建與參考節(jié)點(diǎn)的關(guān)系 。 我們還創(chuàng)建索引 “成分”,該索引用于索引成分名稱。 源代碼: https : //github.com/luanne/flavorwocky/blob/master/grails-app/conf/BootStrap.groovy
添加配對:
添加配對涉及
- 檢查任一節(jié)點(diǎn)是否已經(jīng)存在以避免重新創(chuàng)建它
- 創(chuàng)建兩個節(jié)點(diǎn)并將它們在單個事務(wù)中鏈接到其類別
- 在上面的同一筆交易中創(chuàng)建它們之間的關(guān)系
為此,我們使用了批處理操作 (注意,這仍然是實(shí)驗(yàn)性的)。
來源: https : //github.com/luanne/flavorwocky/blob/master/grails-app/controllers/com/herokuapp/flavorwocky/FlavorwockyController.groovy (fetchOrCreateNodes())
自動完成 :這只是一個索引查找 ,其名稱匹配部分輸入的成分。 來源: https : //github.com/luanne/flavorwocky/blob/master/grails-app/controllers/com/herokuapp/flavorwocky/FlavorwockyController.groovy (autosearch())
可視化:
我們使用d3.js為搜索結(jié)果提供了兩種可視化效果。 “探索”可視化基于節(jié)點(diǎn)鏈接樹 ; 我們使用Cypher查詢來查找與所搜索成分配對的所有成分(最多3個層次),將其轉(zhuǎn)換為適當(dāng)?shù)臄?shù)據(jù)結(jié)構(gòu),并將其呈現(xiàn)為JSON。 請注意,盡管可視化是交互式的,但數(shù)據(jù)獲取不是。 一次可以獲取3個級別的整個數(shù)據(jù)集-將來的增強(qiáng)功能是僅在擴(kuò)展節(jié)點(diǎn)時才可以獲取子級。
來源: https : //github.com/luanne/flavorwocky/blob/master/grails-app/controllers/com/herokuapp/flavorwocky/FlavorwockyController.groovy (getSearchVisualizationAsTreeJson())
盡管這棵樹很漂亮,但缺點(diǎn)是它是一棵樹,因此,如果孩子彼此鏈接,那么您會在樹中看到該成分的多個實(shí)例。 因此,我們嘗試了另一種可視化方法來捕獲成分之間的相互關(guān)系,并且還捕獲了有趣的事實(shí)(例如風(fēng)味三重奏)-如果您在網(wǎng)絡(luò)可視化中看到一個三角形,則這三種成分可以很好地結(jié)合在一起的可能性很高。
為此,我們使用了力導(dǎo)向圖 。 同樣, Cypher查詢可以解決這個問題(這次深入了5個級別以生成更豐富的模型)。
來源: https : //github.com/luanne/flavorwocky/blob/master/grails-app/controllers/com/herokuapp/flavorwocky/FlavorwockyController.groovy (getSearchVisualizationAsNetworkJson())
在兩個示例中,配對的親和力用于計算成分之間連接器的長度,這表明較短的連接具有比較長連接的成分更好的配對。
就是這樣! 這個應(yīng)用程序可以做很多事情,但是需要等待一些時間。
如果您喜歡Flavorwocky ,或者只想讓我贏,請發(fā)布有關(guān)Flavorwocky的 推文 。 投票也有幫助!
參考: 本月風(fēng)味-用于Heroku的Neo4j附加組件和本月 風(fēng)味-Neo4j和Heroku,是我們JCG合作伙伴的第二部分 ? Thought Bytes博客上的Aldrin和Luanne Misquitta。
翻譯自: https://www.javacodegeeks.com/2012/02/flavor-of-month-neo4j-and-heroku.html
總結(jié)
以上是生活随笔為你收集整理的本月风味– Neo4j和Heroku的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java自动机实现
- 下一篇: 学豆腐脑技术 怎样学豆腐脑技术