【问题标题】:Cypher query returns duplicated resultsCypher 查询返回重复的结果
【发布时间】:2013-04-09 07:11:28
【问题描述】:

我有以下图表设置:

start root=node(0)
create (F {name:'FRAME'}), (I {name: 'INTERACTION'}), (A {name: 'A'}), (B {name: 'B'}),
root-[:ROOT]->F, F-[:FRAME_INTERACTION]->I, I-[:INTERACTION_ACTOR]->A, I-[:INTERACTION_ACTOR]->B

以下查询返回重复的结果:

START actor=node:node_auto_index(name='A') 
MATCH actor<-[:INTERACTION_ACTOR]-interaction-[:INTERACTION_ACTOR]->actor2,
   frame-[:FRAME_INTERACTION]->interaction 
RETURN frame, interaction

Query Results

+-----------------------------------------------------+
| frame                 | interaction                 |
+-----------------------------------------------------+
| Node[1]{name:"FRAME"} | Node[2]{name:"INTERACTION"} |
| Node[1]{name:"FRAME"} | Node[2]{name:"INTERACTION"} |
+-----------------------------------------------------+
2 rows
52 ms

即使我再添加一个开始节点来尝试限制结果,我也有同样的结果:

START actor=node:node_auto_index(name='A'), frame=node:node_auto_index(name='FRAME') 
MATCH actor<-[:INTERACTION_ACTOR]-interaction-[:INTERACTION_ACTOR]->actor2,
   frame-[:FRAME_INTERACTION]->interaction 
RETURN frame, interaction

我想了解查询返回重复结果的原因。 我知道可以通过使用 distinct 返回唯一的结果,但是是否可以更改查询以便通过匹配路径仅返回一个结果,而不应用额外的操作(distinct)?

(可以在http://console.neo4j.org/?id=q2e0ay 测试设置和查询)

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    如果您将actor2 添加到您的退货列表中,您会发现问题所在:

     frame                 interaction                 actor             actor2
    (7 {name:"FRAME"})    (8 {name:"INTERACTION"})    (9 {name:"A"})    (9 {name:"A"})
    (7 {name:"FRAME"})    (8 {name:"INTERACTION"})    (9 {name:"A"})    (10 {name:"B"})
    

    演员“A”作为actor2的值被包含在内!但仔细想想,这是有道理的,因为您在查询中没有告诉 neo4j actoractor2 需要是不同的实体。

    幸运的是,这很容易做到:

    START actor=node:node_auto_index(name='A') 
    MATCH actor<-[:INTERACTION_ACTOR]-interaction-[:INTERACTION_ACTOR]->actor2,
        frame-[:FRAME_INTERACTION]->interaction 
    WHERE actor <> actor2      //like this!
    RETURN frame, interaction
    

    【讨论】:

    • 谢谢!我专注于一个更复杂的查询,并没有在这个简单的示例中看到眼前的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-01-19
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2016-07-12
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多