如何让 py2neo 密码查询接受来自 python 的参数?
How to have a py2neo cypher query take in arguments from python?
总体背景
我目前正在尝试将 neo4j 查询写入要在 flask 中使用的函数。
我的目标是让该函数从 csv 文件加载数据,该文件会定期自我更新并根据需要创建新的节点和关系。之后,用户将能够输入与其文章标题相关的搜索词,并使用 Jaccard 相似度方法查找与其文章相关的关键字。
我一直在尝试遵循此处显示的函数结构:
https://github.com/nicolewhite/neo4j-flask/blob/master/blog/models.py
我已经单独测试了 neo4j 密码查询,我目前正在尝试让 py2neo 将用户输入作为搜索词并添加到我的密码查询中以查找相似的关键字。
我的标题csv数据结构如下:
title_id,title
T1,ArticleTitle1
T2,ArticleTitle2
我的关键字 csv 文件如下所示:
title_id,keyword_id,keyword
T1,K1,aaa
T1,K2,bbb
T1,K3,ccc
T1,K4,ddd
T2,K1,aaa
T2,K5,eee
T2,K6,fff
T2,K4,ddd
目前,我的 py2neo 代码如下所示:
from py2neo import Graph, Node, Relationship
from datetime import datetime
import os
import uuid
url = os.environ.get('GRAPHENEDB_URL', 'http://localhost:7474')
graph = Graph(url + '/db/data/', username="****", password="****")
class Keyword:
def jaccard_kw_rec(self, search):
query2 = '''MATCH (p:Title)-[:SIMILAR]->(other),
(other)-[:HAS_KEYWORDS]->(keyword)
WHERE not((p)-[:HAS_KEYWORDS]->(keyword)) and p.Title contains {self.search}
RETURN keyword AS keywords
'''
return graph.run(query2)
我已经复制了函数的形式,但是在 运行 之后出现错误(python 仍然将我的查询视为一个字符串)我有点迷失了我应该去哪里从这里开始。
非常感谢,
埃里克
对于我的具体问题,我发现以下方法对我有用:
def jacc_kw_rec(search):
q_r = []
query2 = "MATCH (p:Title)-[:SIMILAR]->(other), (other)-[:HAS_KEYWORDS]->(keyword) " \
"WHERE not((p)-[:HAS_KEYWORDS]->(keyword)) and p.Title contains \"{}\"".format(
search) + "RETURN keyword AS keywords LIMIT 3"
result = graph.run(query2).data()
for r in result:
r_j = json.dumps(r)
loaded_r = json.loads(r_j)
kw_ex = loaded_r['keywords']['Keyword']
q_r.append(kw_ex)
return q_r
本质上,字符串连接和 .format() 函数的组合。
总体背景
我目前正在尝试将 neo4j 查询写入要在 flask 中使用的函数。
我的目标是让该函数从 csv 文件加载数据,该文件会定期自我更新并根据需要创建新的节点和关系。之后,用户将能够输入与其文章标题相关的搜索词,并使用 Jaccard 相似度方法查找与其文章相关的关键字。
我一直在尝试遵循此处显示的函数结构:
https://github.com/nicolewhite/neo4j-flask/blob/master/blog/models.py
我已经单独测试了 neo4j 密码查询,我目前正在尝试让 py2neo 将用户输入作为搜索词并添加到我的密码查询中以查找相似的关键字。
我的标题csv数据结构如下:
title_id,title
T1,ArticleTitle1
T2,ArticleTitle2
我的关键字 csv 文件如下所示:
title_id,keyword_id,keyword
T1,K1,aaa
T1,K2,bbb
T1,K3,ccc
T1,K4,ddd
T2,K1,aaa
T2,K5,eee
T2,K6,fff
T2,K4,ddd
目前,我的 py2neo 代码如下所示:
from py2neo import Graph, Node, Relationship
from datetime import datetime
import os
import uuid
url = os.environ.get('GRAPHENEDB_URL', 'http://localhost:7474')
graph = Graph(url + '/db/data/', username="****", password="****")
class Keyword:
def jaccard_kw_rec(self, search):
query2 = '''MATCH (p:Title)-[:SIMILAR]->(other),
(other)-[:HAS_KEYWORDS]->(keyword)
WHERE not((p)-[:HAS_KEYWORDS]->(keyword)) and p.Title contains {self.search}
RETURN keyword AS keywords
'''
return graph.run(query2)
我已经复制了函数的形式,但是在 运行 之后出现错误(python 仍然将我的查询视为一个字符串)我有点迷失了我应该去哪里从这里开始。
非常感谢,
埃里克
对于我的具体问题,我发现以下方法对我有用:
def jacc_kw_rec(search):
q_r = []
query2 = "MATCH (p:Title)-[:SIMILAR]->(other), (other)-[:HAS_KEYWORDS]->(keyword) " \
"WHERE not((p)-[:HAS_KEYWORDS]->(keyword)) and p.Title contains \"{}\"".format(
search) + "RETURN keyword AS keywords LIMIT 3"
result = graph.run(query2).data()
for r in result:
r_j = json.dumps(r)
loaded_r = json.loads(r_j)
kw_ex = loaded_r['keywords']['Keyword']
q_r.append(kw_ex)
return q_r
本质上,字符串连接和 .format() 函数的组合。