Neo4j 可选节点上的密码查询匹配
我正在尝试改进已发布的查询: 同样,我有Neo4j 可选节点上的密码查询匹配,neo4j,cypher,Neo4j,Cypher,我正在尝试改进已发布的查询: 同样,我有项图形数据库。每个项目都连接到多个属性,这些属性可以由多个项目共享。 但是,这次我想搜索项,从几个属性节点开始,然后查找连接最紧密的项 因此,我有一组属性pr=[“pr1”、“pr2”、“pr3”],我想找到最相关的项 i、 e match (pr)-[r]-(item) return item, count(r) as matching_properties order by matching_properties 但是,我也想找到类似的项目。在属性
项
图形数据库。每个项目
都连接到多个属性
,这些属性可以由多个项目
共享。
但是,这次我想搜索项
,从几个属性
节点开始,然后查找连接最紧密的项
因此,我有一组属性pr=[“pr1”、“pr2”、“pr3”]
,我想找到最相关的项
i、 e
match (pr)-[r]-(item)
return item, count(r) as matching_properties
order by matching_properties
但是,我也想找到类似的项目。在属性
之间存在类似的关系,我想找到:
MATCH (pr) -[:SIMILAR]->(pr2)-[r]-(item)
我尝试通过执行以下操作检索所有项目:
MATCH (pr) -[r*1..2]-(item)
问题是,我只希望通过属性
节点获得具有相似
关系的路径,不幸的是,我有很多路径通过具有其他关系的其他节点。
所以我可以这样做:
MATCH (pr) -[r*1..2]-(item)
where (length(r)= 1 or ANY (x in r where (type(x)="SIMILAR")))
但这真的没有效率,因为它只是路径的一小部分。
我真的想做一个类似以下内容的可选匹配:
MATCH (pr) -[r2?:SIMILAR]->(pr2?)-[r]-(item)
where pr2.type = "property"
或者,在两个路径选项之间使用“或”操作数(我知道它不存在..)
有办法吗?
目前我正在使用neo4j 1.9.2,但我正计划迁移到2.0。
所以2.0版的答案对我也有好处。类似的东西
从0开始的路径(*0..
)也包括到起始节点的零长度路径
MATCH (pr:property)-[:SIMILAR*0..1]->(pr2:property)<-[:HAS_PROPERTY]-(item:item)
RETURN pr2, item
匹配(pr:property)-[:类似*0..1]->(pr2:property)类似这样的东西
从0开始的路径(*0..
)也包括到起始节点的零长度路径
MATCH (pr:property)-[:SIMILAR*0..1]->(pr2:property)<-[:HAS_PROPERTY]-(item:item)
RETURN pr2, item
匹配(pr:property)-[:相似*0..1]->(pr2:property)这就是我想要的-它给出了所有相似/不相似的项。这就是我想要的-它给出了所有相似/不相似的项。