问题摘要
我尝试使用相同的csv文件在neo4j / py2neo中重新创建函数和图形,但在csv文件中没有唯一的ID。
但是,当我尝试调用在py2neo中编写的函数以返回推荐的关键字时,该函数将返回一个空列表。当我将py2neo放到浏览器中时,会使用相同的密码查询给我正确的建议。
//Jaccard Similarity keyword recommendation
MATCH (search_query:Title)-[:HAS_KEYWORDS]->(k:Keyword)
WITH {item:id(search_query), categories: collect(id(k))} as userData
WITH collect(userData) as data
CALL algo.similarity.jaccard(data, {topK: 1, similarityCutoff: 0.1, write:true})
YIELD nodes, similarityPairs, write, writeRelationshipType, writeProperty, min, max, mean, stdDev, p25, p50, p75, p90, p95, p99, p999, p100
RETURN nodes, similarityPairs, write, writeRelationshipType, writeProperty, min, max, mean, p95
//Return similar keywords
MATCH (p:Title)-[:SIMILAR]->(other),
(other)-[:HAS_KEYWORDS]->(keyword)
WHERE not((p)-[:HAS_KEYWORDS]->(keyword)) and p.title contains "aaa"
RETURN keyword AS keywords
当我将密码代码输入浏览器时,我得到了预期的结果,但是我注意到当我输入搜索[:SIMILAR]的密码查询时弹出警告:
索引无法有效执行通配符查询
如果使用
CONTAINS
的语句的性能不符合您的期望,请查看备用索引提供者,请参阅有关索引配置的文档。 (索引是::Title(title)上的索引)
我的py2neo功能:
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
当我测试旧代码时,该函数将返回建议的关键字列表,例如['aaa','bbb','ccc']
更新:在旧代码上测试了我的功能之后,它仍然返回一个空列表。 graph.run(query2).data()为空。
我想知道:
非常感谢
埃里克
答案 0 :(得分:0)
...最终由于Neo4j认为这是空的比赛而无法输入。
由于
kw_ex = loaded_r['keywords']['Keyword']
更改为:
kw_ex = loaded_r['keyword']['Keyword']
它又开始工作了。
我仍然不明白为什么光标实际上什么也没显示,但却发现了一些东西,但是遇到了无法解决的错误。