过滤路径的neo4j密码查询
我正在使用neo4j来存储具有两个标签中的一个标签的节点的数据:过滤路径的neo4j密码查询,neo4j,cypher,Neo4j,Cypher,我正在使用neo4j来存储具有两个标签中的一个标签的节点的数据:Person和Organization。所有节点都有一个属性:name 所有关系都标记为LinkedTo,并具有一个属性:score。一对人员和组织节点之间可能存在多个关系 我使用路径查询来搜索这些节点之间的路径,如: MATCH (n:Person) WHERE n.name =~ "(?i)person1" MATCH (m:Organization) WHERE m.name =~ "(?i)organization1" WI
Person
和Organization
。所有节点都有一个属性:name
所有关系都标记为LinkedTo
,并具有一个属性:score
。一对人员
和组织
节点之间可能存在多个关系
我使用路径查询来搜索这些节点之间的路径,如:
MATCH (n:Person) WHERE n.name =~ "(?i)person1"
MATCH (m:Organization) WHERE m.name =~ "(?i)organization1"
WITH m,n
MATCH p = (m)-[*1..4]-(n)
RETURN p ORDER BY length(p) LIMIT 10
这将返回所有路径(最多10条)
现在我想找到特定的路径,所有涉及的关系都有一个score=1
。不确定如何实现这一点,我从匹配p=(m)-[f*1..4]-(n)开始,但它得到了一个弃用警告。所以在谷歌搜索、尝试和错误之后,我想到了这个:
MATCH (n:Person) WHERE n.name =~ "(?i)person1"
MATCH (m:Organization) WHERE m.name =~ "(?i)organization1"
WITH m,n
MATCH p = (m)-[*1..4]-(n)
WITH filter(x IN relationships(p) WHERE x.score=1) AS f
ORDER BY length(p)
UNWIND f AS ff
MATCH (a)-[ff]-(b)
RETURN a,b,ff LIMIT 10
但这是不正确的,不干净的,给了我路径中不需要的关系和节点
这可能是一个基本的密码查询,但我只是一个初学者,需要这方面的帮助。:) 据我所知,您正在搜索此查询:
MATCH p = (m:Organization)-[rels*1..4]-(n:Person)
WHERE
n.name =~ "(?i)person1" AND
m.name =~ "(?i)organization1" AND
all(r IN rels WHERE r.score=1)
RETURN p
ORDER BY length(p)
由于all(rels中的r,其中r.score=1)
,Neo4j只会在属性score
设置为1
的路径中展开关系
您还应该注意,您正在为节点n
和m
使用正则表达式条件,并且此运算符不能使用索引!
如果您的目标是进行不区分大小写的搜索,我建议您创建一个清理字段(例如
\u name
)以小写形式存储名称,并用包含的或以开头的替换您的正则表达式(谢谢您,这正是我要找的!)所以你也可以接受这个答案:(玩得开心!我做了,我想它没有注册!我现在做了!