首页 > 解决方案 > 如何根据属性过滤neo4j中的节点列表

问题描述

我想消除那些不以“媒体主题”开头的路径,名称=“媒体主题”是语言中节点的属性。

这是我的查询

MATCH path = (top:Taxonomy)-[:IS_CHILD_OF*0..]->(taxo)
WHERE NOT ()-[:IS_CHILD_OF]->(top)
WITH DISTINCT [node in nodes(path) | [(language)-[:IN_LANGUAGE{lang:'en'}]->(node) | language][0]] as languages//chn
ORDER BY size(languages) DESC
return [n in reverse(languages) | n.name ] as nodesInPath

这是我的输出

["Media Topic", "crime, law and justice", "judiciary", "court", "trial (court)", "sentencing (criminal)", "capital punishment"]

["Media Topic", "crime, law and justice", "judiciary", "court", "trial (court)", "sentencing (criminal)", "fine (penalty)"]

["Media Topic", "crime, law and justice", "judiciary", "court", "trial (court)", "sentencing (criminal)", "prison"]

["Media Topic", "crime, law and justice", "judiciary", "court", "trial (court)", "sentencing (criminal)", "court-ordered psychiatric treatment"]

["crime, law and justice", "judiciary", "court", "trial (court)", "pre-trial"]

现在不应打印最后一行,因为它不是以“媒体主题”开头

标签: filterneo4jcyphernodes

解决方案


MATCH path = (top:Taxonomy)-[:IS_CHILD_OF*0..]->(taxo) 
WHERE NOT ()-[:IS_CHILD_OF]->(top) 
WITH DISTINCT [node in nodes(path) | [(language)-[:IN_LANGUAGE{lang:'en'}]->(node) | language][0]] as languages 
ORDER BY size(languages) DESC
WITH [n in reverse(languages) | n.name ] as nodesInPath 
WHERE nodesInPath[0]= "Media Topic"
RETURN nodesInPath

我没有太多改变你的查询,因为我不是你想要在这里实现的目标。但我确实觉得这个查询可以提高性能。我过滤了你得到的最终列表,条件是第零个元素应该是“媒体主题”。如果您可以提供有关图表的更多详细信息。我可能会更有帮助。


推荐阅读