Neo4j Cypher查询处理多个关系

时间:2016-04-05 06:59:31

标签: java neo4j cypher

我们有一个图表,其中用户与他/她感兴趣的一些主题节点相关,并且这些主题通过某种关系与某些问题相关联。通过以下查询很容易得到用户感兴趣主题的所有问题。

match(u:user{name:'vartika'})<-[:userinteresttag]-(tag)-[:tagofquestion]->(q:question) return q.title
                    (user)
                  /        \
                 /          \
            (subject1)  (subject2)  (subject3)
             /  \             / 
            /    \           /   
       (ques1) (ques2) (ques3) (ques4)(ques5)

但现在的问题是如何解决特定用户感兴趣的主题以外的问题。如何塑造查询以获得非兴趣课程的问题。 (用户和问题节点未直接连接,如图中所示)

*我想查询获取不属于userinteressubject的ques4和ques5,因为subject3不是userinterestsubject *

1 个答案:

答案 0 :(得分:0)

其中一个解决方案是修改您的数据库体系结构,并且每当用户要求问题直接将其附加到用户时,无论何时您还需要将问题附加到标记。 所以你会有像

这样的东西
match(u:user{name:'vartika'})-[:asked]->(q:question) return q.title

另一种解决方案就像是

match(u:user{name:'vartika'})-[rel*1..3]->(q:question) return q.title

但这取决于你知道用户和问题之间路径的长度

编辑: 试试这个

match(u:user{name:'vartika'}) with u Match (q:question) where not (u)<-[:userinteresttag]-()-[:tagofquestion]->(q) return q 

您将通过标记

获得与用户无关的所有问题