【问题标题】:Neo4j matching nodes based on multiple criteria基于多个条件的 Neo4j 匹配节点
【发布时间】:2016-03-29 14:46:16
【问题描述】:

我们正在使用 Neo4j 为快速约会类型的会议寻找最佳匹配。在会议之前,每个人都会填写一份表格,其中指定:

  1. 语言(一种或多种)
  2. 位置(首选一到五个)
  3. 兴趣(一到五个兴趣)

我们已将数据提取到 Neo4j 中,因此人员、语言、位置和兴趣都是节点类型。节点上的标签代表文字值,例如(人:戴夫)->[r:knows]->(语言:英语)。

我们希望遍历所有 Person 节点并找到与其他具有相同语言、位置和兴趣的 Person 节点的所有匹配项。

在伪代码中:语言(英语||西班牙语)&& 地点(马里兰州||DC||弗吉尼亚州)&& 兴趣(书籍||电影||食品||体育)

我对 Cypher 很陌生,因此我将不胜感激。谢谢!

【问题讨论】:

    标签: graph neo4j


    【解决方案1】:

    试试这样的

    Match (p:Person) with p  
    // skip 0 limit 1000 -optional if you have big data 
    Match (p)-[r:SPEAKS]->(l:Language)<-[r2:SPEAKS]-(p2:Person), 
    (p)-[r3:LIVES]->(l:Location)<-[r4:LIVES]-(p2), 
    (p)-[r5:LIKES]->(l:Interest)<-[r6:LIKES]-(p2) 
    where id(p) < id(p2) 
    Return distinct p, p2
    

    您可能会使用不同的方式来排除重复项 (id(p)

    【讨论】:

    • 对不起,这已经有一段时间了,但这确实很好。当时我有一个 1 周大的孩子,所以我忘了回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多