Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j Cypher:使用公共节点关系链接为医生推荐文章_Neo4j_Cypher - Fatal编程技术网

Neo4j Cypher:使用公共节点关系链接为医生推荐文章

Neo4j Cypher:使用公共节点关系链接为医生推荐文章,neo4j,cypher,Neo4j,Cypher,用例 我的应用程序应该根据用户的个人资料和用户操作向用户(医生)推送文章。在下面的示例中,考虑(参见下面的图表): 两位医生(一位是职业:医生,专业:肿瘤学,另一位是医生,专业:未知) 一篇文章已手动链接到专业:医生、专业:肿瘤学和关键词:膝关节手术(即,向匹配此配置文件的用户显示本文) 前端向后端发送用户id,后端需要使用与用户配置文件匹配的n文章进行响应 问题 给定一个用户配置文件,Neo4jCypher查询基本上会转换为MATCH(a:Article)…。或者用不同的方式查找与用户拥

用例

我的应用程序应该根据用户的个人资料和用户操作向用户(医生)推送文章。在下面的示例中,考虑(参见下面的图表):

  • 两位医生(一位是职业:医生,专业:肿瘤学,另一位是医生,专业:未知)
  • 一篇文章已手动链接到专业:医生、专业:肿瘤学和关键词:膝关节手术(即,向匹配此配置文件的用户显示本文)
前端向后端发送用户id,后端需要使用与用户配置文件匹配的
n
文章进行响应

问题

给定一个用户配置文件,Neo4jCypher查询基本上会转换为
MATCH(a:Article)…
。或者用不同的方式查找与用户拥有的职业、关键字和专业节点具有类似关系的(a:Article)[……]

我的密码查询应该是什么形状?

TL;DR

这是一个开始:

MATCH p=(u:User {id: $theID})-[:r]->()<-[:m]-(a:Article)
WITH a, COUNT(p) as rank
RETURN a.name, rank
ORDER BY rank DESC
LIMIT $n
这是错综复杂的混乱局面

现在只看一个“医生”:


MATCH p=(u:User{name:“Barney”})-[:R]->()(你知道如何只使用
:Keyword
:Profession
,或
:speciality
中的一个来查找
:User
?我知道如何匹配基本路径,如MATCH(a:Article)-[]-(n)[]。。。等等,但在这里我想找到一个给定用户的“精确匹配”文章,考虑到两者之间的关系(其中文章与用户的关系最多),你有一些测试数据要共享吗?只是你在屏幕上看到的数据。如果需要的话,我可以导出create语句。在我编辑了你的帖子后,我投了赞成票。我想大多数人都喜欢看MWE,即使它是失败的。。。或者是给定输入的所需输出的清晰示例等。一些示例数据的来源也为解决方案寻求者节省了大量时间。此外,这里也是索取密码的好地方。他们也喜欢用例。
MERGE (p:Profession {name: "Doctor"})
WITH p, ["Fred","Wilma","Pebbles","Dino","Barney","Betty","Bamm-bamm", "Hoppy"] as doctors
UNWIND doctors as doc
MERGE (d:User {name: doc})-[:R]->(p);

WITH ["Oncology", "Pathology","Pediatrics","ENT","Radiology","Dermatology"] as specialties
UNWIND specialties as spec
MERGE (:Specialty {name: spec});

MATCH (d:User)
WITH d, ["Oncology", "Pathology","Pediatrics","ENT","Radiology","Dermatology"] as specialties
UNWIND apoc.coll.randomItems(specialties, toInteger(apoc.text.random(1,"00111223"))) as docspec
MATCH (spec:Specialty {name: docspec})
MERGE (d)-[:R]->(spec);

WITH ["Knee Surgery","Ear Injury","Throat Cultures","Radial fractures", "Arm rash", "Mole color"] as keywords
UNWIND keywords as key
MERGE (:Keyword {name: key});

MATCH (d:User)
WITH d, ["Knee Surgery","Ear Injury","Throat Cultures","Radial fractures", "Arm rash", "Mole color"] as keywords
UNWIND apoc.coll.randomItems(keywords, toInteger(apoc.text.random(1,"01112233"))) as docword
MATCH (key:Keyword {name: docword})
MERGE (d)-[:R]->(key);

MATCH (p:Profession {name: "Doctor"})
WITH p, ["Useful article","Cool article","Awesome article","Research article","Nifty article","Health article"] as articles
UNWIND articles as art
MERGE (:Article {name: art})-[:M]->(p);

MATCH (art:Article)
WITH art, ["Oncology", "Pathology","Pediatrics","ENT","Radiology","Dermatology"] as specialties
UNWIND apoc.coll.randomItems(specialties, toInteger(apoc.text.random(1,"111223"))) as artspec
MATCH (spec:Specialty {name: artspec})
MERGE (art)-[:M]->(spec);

MATCH (art:Article)
WITH art, ["Knee Surgery","Ear Injury","Throat Cultures","Radial fractures", "Arm rash", "Mole color"] as keywords
UNWIND apoc.coll.randomItems(keywords, toInteger(apoc.text.random(1,"1112233"))) as artword
MATCH (key:Keyword {name: artword})
MERGE (art)-[:M]->(key);
MATCH p=(u:User {name: "Barney"})-[:R]->()<-[:M]-(a:Article)
RETURN p
MATCH p=(u:User {name: "Barney"})-[:R]->()<-[:M]-(a:Article)
WITH a, COUNT(p) as rank
RETURN a.name, rank
ORDER BY rank DESC