Neo4j 目标反向匹配所有关系要求的密码查询

Neo4j 目标反向匹配所有关系要求的密码查询,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我使用的是Neo4j社区3.4.1 我有一个图表,看起来像: 绿色节点是列表 上面的清单是清单1,下面的清单是清单2 顶部特征是壁炉,底部特征是停车 我正在寻找一个从特定列表开始的密码查询,并查找满足该SavedSearch条件的所有SavedSearch 例如,清单二将满足上述SavedSearch,因为它与SavedSearch的两个条件都有关系 但是,列出一个将不符合条件,因为该列表只满足一个SavedSearchs条件 我有以下查询,它从一个列表开始,并匹配任何具有直接路径的已保存搜索

我使用的是Neo4j社区3.4.1

我有一个图表,看起来像:

绿色节点是列表

上面的清单是清单1,下面的清单是清单2

顶部特征是壁炉,底部特征是停车

我正在寻找一个从特定列表开始的密码查询,并查找满足该SavedSearch条件的所有SavedSearch

例如,清单二将满足上述
SavedSearch
,因为它与SavedSearch的两个条件都有关系

但是,列出一个将不符合条件,因为该列表只满足一个SavedSearchs条件

我有以下查询,它从一个列表开始,并匹配任何具有直接路径的已保存搜索,但该搜索不会检查已保存搜索中的所有路径是否连接回。因此,以下查询将返回清单1和清单2的SavedSearch:

MATCH (l:Listing {list_id: 'one'})
MATCH (l)-[:ATTRIBUTE]
      ->(:Value {field: 'features', value: 'Fireplace'})
      <-[:CONDITION]
      -(s:SavedSearch)
RETURN s
MATCH(l:清单{list_id:'one'})
匹配(l)-[:属性]
->(:Value{field:'features',Value:'firplace'})

您可以使用和函数尝试此解决方案:

match (:Listing {list_id :'one'})-[:ATTRIBUTE]->(attr:Value {field: 'features', value: 'Fireplace'})
with collect(attr) as attrs
match (s:SavedSearch)
where all (attr in attrs where (s)-[:CONDITION]->(attr))
return s
我正在将所有属性存储到名为
attrs
的集合中。然后匹配连接到每个
attr
的所有
SavedSearch
e