您好,登錄后才能下訂單哦!
如何同時(shí)使用Redis和RedisGraph模塊?針對(duì)這個(gè)問題,今天小編總結(jié)這篇運(yùn)用實(shí)例講解的文章,解題步驟非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家有所幫助。
在這個(gè)演示中我展示了一個(gè)小界面,它支持搜索動(dòng)物并通過生物分類系統(tǒng)(界、門、類、目等)查看它們之間的關(guān)系。全文部分基于維基百科的第一段英文。例如,搜索“寵物貓”和“Blue Whale”,會(huì)發(fā)現(xiàn)他們都是哺乳動(dòng)物,而如果搜索“寵物貓”和“雪豹”,則會(huì)發(fā)現(xiàn)他們都屬于同一個(gè)科:貓科。
這個(gè)演示項(xiàng)目出乎意料地簡(jiǎn)單,但我應(yīng)該指出 RediSearch 和 RedisGraph 之間的集成仍處于早期階段,在編寫本文時(shí)還沒有準(zhǔn)備好應(yīng)用于生產(chǎn)環(huán)境。所以,我建議您在了解 RediSearch 和 RedisGraph 的集成將在未來幾個(gè)月逐漸成熟的前提下,確定此方法是否能夠滿足您的需求。
讓我們?cè)儆懻撘幌氯绾螐脑创a構(gòu)建。要完成的第一件事是基于代碼庫中正確的分支構(gòu)建 RediSearch 和 RedisGraph。RediSearch 使用的是當(dāng)前的主分支,而 RedisGraph 是 redisconf 分支。如果您想根據(jù)自己的需要構(gòu)建解決方案,可以從源代碼構(gòu)建這兩個(gè)模塊。RedisGraph 和 RediSearch 的網(wǎng)站上都有關(guān)于如何構(gòu)建的詳細(xì)說明,這并不困難,只是需要一點(diǎn)時(shí)間。
配置模塊的位置在 redis.conf 文件中,為了確保在 RediSearch 之前加載 RedisGraph,需要在 redis.conf 文件的模塊部分將 RediSearch 的 loadmodule 配置項(xiàng)放在 RedisGraph 的 loadmodule 配置項(xiàng)之前。在完成編輯 redis.conf 之后,需要重啟Redis 服務(wù)器讓配置生效。
在之前演示的 demo 中,我使用 RedisGraph-bulk-loader 腳本將以下內(nèi)容從 CSV 加載到 RedisGraph,從而包括了我們收集的數(shù)據(jù)集。這個(gè)數(shù)據(jù)集只包括哺乳動(dòng)物,因?yàn)槠渌麆?dòng)物的數(shù)據(jù)質(zhì)量較低(非哺乳動(dòng)物物種很少有好的維基百科描述)。
下面是加載數(shù)據(jù)的例子:
$ cd redisgraph-bulk-loader/ $ python3 bulk_insert.py MAMMALS -q -n /path/to/demo/dataload/Class.csv -n /path/to/demo/dataload/Family.csv -n /path/to/demo/dataload/Genus.csv -n /path/to/demo/dataload/Order.csv -n /path/to/demo/dataload/Species.csv -r /path/to/demo/dataload/IN_CLASS.csv -r /path/to/demo/dataload/IN_FAMILY.csv -r /path/to/demo/dataload/IN_GENUS.csv -r /path/to/demo/dataload/IN_ORDER.csv -a yourpassword 1 nodes created with label 'Class' 157 nodes created with label 'Family' 1272 nodes created with label 'Genus' 29 nodes created with label 'Order' 5616 nodes created with label 'Species' 29 relations created for type 'IN_CLASS' 1272 relations created for type 'IN_FAMILY' 5616 relations created for type 'IN_GENUS' 157 relations created for type 'IN_ORDER' Construction of graph 'MAMMALS' complete: 7075 nodes created, 7074 relations created in 0.443749 seconds $ redis-cli -a yourpassword GRAPH.QUERY MAMMALS "CALL db.idx.fulltext.createNodeIndex('Species','description')" Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. 1) (empty list or set) 2) (empty list or set) 3) 1) "Query internal execution time: 324.970000 milliseconds"
(gist:https://gist.github.com/stockholmux/0727a4a784a46f8cb9e8329d393a513a)
在這里,key MAMMALS 包含了我們的整個(gè)圖表。一些重要的注意事項(xiàng):
?bulk_insert.py 上的-q開關(guān)非常重要,因?yàn)樗试S在讀取 CSV 時(shí)進(jìn)行智能引用。
?調(diào)用一次 redis-cli 對(duì)所有節(jié)點(diǎn)進(jìn)行批量索引,從而為全文搜索攝取了7000 多個(gè)文檔。
現(xiàn)在讓我們啟動(dòng)并運(yùn)行一個(gè) UI。和幾乎所有 Node.js 應(yīng)用程序一樣,我們先安裝 npm。安裝大概需要幾秒鐘,因?yàn)槲覀儾粌H要管理Node 的服務(wù)器端文件。還有前端的 Vue.js 組件。如果你最近沒有花很多時(shí)間在前端JavaScript 上,那你大概不能使用一個(gè) FTP 和 HTML 文件來實(shí)現(xiàn)這些功能。所幸現(xiàn)代前端確實(shí)重視工具,所以我們可以安裝 VueCLI(我建議遵循 Vue CLI 入門指南)。
在你的前端工具準(zhǔn)備好過后,讓我們繼續(xù)來講 npm 安裝和啟動(dòng)運(yùn)行前端上:
$ npm run build
這將創(chuàng)建我們所有前端文件的 dist 目錄?,F(xiàn)在我們有數(shù)據(jù)在 Redis 里,我們的前端文件也準(zhǔn)備好啟動(dòng)服務(wù),所以我們可以連接 Redis 服務(wù)器:
$ node server.js -p 6379 -a yourpassword -hyourhostOrlocalhost
讓我們先討論一下關(guān)于我們剛剛打開的這個(gè)服務(wù)器的一些問題。它構(gòu)建在 Express.js上,主要使用 WebSocket 進(jìn)行通信。我還集成了可視化引擎調(diào)試工具,它允許您在單獨(dú)的瀏覽器窗口中查看正在執(zhí)行的命令。你可以把瀏覽器指向地址:http://localhost:4444。
總之,相對(duì)于它所實(shí)現(xiàn)的功能來說,它非常的簡(jiǎn)短——只有 75 行代碼。我們的解決方案不需要那么長(zhǎng),因?yàn)槲覀儗?shí)際上所做的就是接受WebSocket 連接,根據(jù)傳遞的消息運(yùn)行 Redis 命令,然后將這些消息與結(jié)果一起傳遞回來。Redis(Graph)做了所有復(fù)雜的工作。讓我們看看正在執(zhí)行的命令。
為了搜索關(guān)鍵字,我們運(yùn)行這個(gè)命令:
> GRAPH.QUERY MAMMALS"CALL db.idx.fulltext.queryNodes('Species','cat house pet')"
這很簡(jiǎn)單。我們的鍵是哺乳動(dòng)物,我們使用一個(gè)特殊的語法調(diào)用了一個(gè)特定的函數(shù),它的第一個(gè)參數(shù)是我們要查找的節(jié)點(diǎn)的標(biāo)簽,另一個(gè)參數(shù)是實(shí)際要搜索的字符串。您可以傳遞有效的RediSearch 參數(shù)進(jìn)行查詢,但請(qǐng)記住,目前這只是全文本搜索,因此不要使用地理空間、標(biāo)記或數(shù)字子句。
一旦我們確定了我們要比較的兩種動(dòng)物,我們就可以使用一個(gè)簡(jiǎn)單的命令進(jìn)行查詢:
> GRAPH.QUERY MAMMALS"MATCH (s:Species)-[*]->(x)<-[*]-(c:Species) WHERE c.fullname ='Felis catus' AND s.fullname = 'Balaenoptera borealis' RETURN x.name,labels(x) LIMIT 1"
在 server.js 文件中,這些查詢被表示為JavaScript 模板字符串,沒有對(duì)用戶隱藏,用戶輸入的字符串被直接插入到輸入中進(jìn)行查詢。但如果在生產(chǎn)環(huán)境中部署類似這樣的東西,就需要小心接收和校驗(yàn)用戶輸入。
如果打算修改前端代碼,請(qǐng)確保編輯的是/src 目錄,而不是/dist。編輯之后,您需要再次運(yùn)行 npmrun build 或使用開發(fā)服務(wù)器(npmrun serve),該服務(wù)器自動(dòng)編譯對(duì)前端代碼的更改,并將其提供給另一個(gè)端口。這是一個(gè)非常標(biāo)準(zhǔn)的Vue.js 和 Bootstrap 應(yīng)用。唯一真正相關(guān)的文件是:/src/App.js, /src/components/panels.vue and /src/components/search.vue.
關(guān)于同時(shí)使用Redis和RedisGraph模塊的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。