如何在密码的关系名称中使用通配符

时间:2019-04-02 09:45:03

标签: neo4j cypher

我具有以下理论图结构:

(:Car)<-[:LIKES_C]-(:Person)-[:LIKES_B]->(:Bike)

Person还具有其他不包含单词 Likes 的关系,例如(:Person)-[:LOVES]-(:Person)

我想编写一个密码查询,该查询将产生具有关联关系的所有连接到Person的节点,其名称以 LIKES 开头。

我也无法将关系名称更改为LIKES,因为有很多带有标签BikeCar的节点,根据this post,Neo4j在诸如以下的查询中效率低下:

MATCH (p:Person)-[:LIKES]->(:Car)

它将同时搜索CarsBikes,然后搜索然后过滤器来搜索Cars,从而有效地增加了执行时间。

是否有一种有效的方法来查询LIKES*关系?

1 个答案:

答案 0 :(得分:4)

雅各布! 有一种方法可以匹配一组关系类型:

# A tibble: 10 x 6
# Groups:   XCODE [5]
   XCODE   Age   Sex ResultA ResultB ResultC
   <fct> <int> <int>   <int>   <int>   <int>
 1 X001     12     2       2       3       4
 2 X001     12     2       2       3       4
 3 X002     23     2       4       6      66
 4 X002     23     2       4       6      66
 5 X003     33     1       8       7       6
 6 X003     33     1       8       7       6
 7 X004     32     1       1       7       3
 8 X004     32     1       1       7       3
 9 X005     55     2       8       8       8
10 X005     55     2       8       8       8

在这种情况下,您将能够遍历match (p:Person)-[:LIKES_C|LIKES_B]->(carOrBike) 节点的:LIKES_C:LIKES_B关系。

还可以将:Person与关系名称列表结合使用,并与UNWIND(描述为here)结合使用,一次查询多个关系。