Neo4j安裝部署及python連接neo4j操作
- Neo4j安裝和環境配置
安裝依賴庫:
sudo apt-get install wget curl nano software-properties-common dirmngr apt-transport-https gnupg gnupg2 ca-certificates lsb-release ubuntu-keyring unzip -y
增加Neo4 GPG key:
curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg
添加Neo4j倉庫:
echo “deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable latest” | sudo tee -a /etc/apt/sources.list.d/neo4j.list
更新倉庫源并安裝Neo4j:
sudo apt-get update && sudo apt-get install neo4j -y
啟用Neo4j;
sudo systemctl enable --now neo4j
允許外部連接:
sudo nano /etc/neo4j/neo4j.conf
修改內容:server.default_listen_address=0.0.0.0
重啟服務:
sudo systemctl restart neo4j
修改系統Host文件:
sudo nano /etc/hosts
添加上主機的ip地址和主機名
訪問主機或者服務器的7474端口,登陸neo4j
2.實現簡單的圖數據庫
以Kaggle上的arXiv數據集(https://www.kaggle.com/datasets/Cornell-University/arxiv)為實驗數據
下載后,文件默認為json文件(arxiv-metadata-oai-snapshot.json)
通過以下代碼讀取數據:
數據結構如下圖所示:
將數據簡化,留下id作為唯一索引,主要屬性title、authors_parsed、categories:
考慮到數據龐大,測試采用在線版的Neo4j Sandbox,創建的鏈接可以保留3天
創建一個空白的sanbox,得到Bolt URL及其端口號:
利用python連接到Neo4j并將數據存儲到數據庫:
在數據庫中創建約束,以確保節點不重復,并設置索引:
conn.query(‘CREATE CONSTRAINT papers IF NOT EXISTS FOR (p:Paper) REQUIRE p.id IS UNIQUE’)
conn.query(‘CREATE CONSTRAINT authors IF NOT EXISTS FOR (a:Author) REQUIRE a.name IS UNIQUE’)
conn.query(‘CREATE CONSTRAINT categories IF NOT EXISTS FOR (c:Category) REQUIRE c.category IS UNIQUE’)
創建三個函數,用于為類別和作者節點創建數據框架:
使用以下函數添加paper節點以及所有關系:
采用批處理將處理加載到neo4j中:
最后,在neo4j Sandbox中執行MATCH操作,得到graph,例如
MATCH (a:Author)-[:AUTHORED]->(p:Paper)-[:IN_CATEGORY]->(c:Category) RETURN a, p, c LIMIT 30
通過以下代碼可以直接在python中進行和上面一樣的MATCH查詢,并返回結果:
query_string = '''
MATCH (a:Author)-[:AUTHORED]->(p:Paper)-[:IN_CATEGORY]->(c:Category) RETURN a, p, c LIMIT 30
'''
top_cat_df = pd.DataFrame([dict(_) for _ in conn.query(query_string)])
top_cat_df.head(20)