【问题标题】:Remove a relationship from index with APOC Neo4J 3.x使用 APOC Neo4J 3.x 从索引中删除关系
【发布时间】:2018-02-20 20:58:58
【问题描述】:

当我在 Neo4J 3.x 中删除关系时,我希望它也从使用 APOC 创建的自动索引中删除。

但是,我没有看到在 APOC 中删除关系的任何程序。我只看到removeRelationshipByName,但是我必须指定关系的名称,如果我有按类型的关系怎么办?如果关系没有被删除,当我尝试按关系属性使用此索引进行搜索时,我会收到错误消息。它在索引中找到一个关系,但它不存在。

为了更好地了解,我使用

创建了现有关系的索引

MATCH ()-[r]->() CALL apoc.index.addRelationship(r,['user','context','statement','gapscan']) RETURN count(*);

这会为多种关系类型创建多个索引。

我还设置了一个触发器,以便每次添加关系时(无论是什么类型)都会将其添加到相应类型的索引中

CALL apoc.trigger.add('RELATIONSHIP_INDEX',"UNWIND {createdRelationships} AS r MATCH ()-[r]->() CALL apoc.index.addRelationship(r,['user','context','statement','gapscan']) RETURN count(*)", {phase:'after'})

现在,我想做的是设置一个触发器,当它们被删除时,它会从索引中删除关系。但是没有程序removeRelationship——只有removeRelationshipByName——但是,我不明白如何在这种情况下使用它。我应该提供什么名字?

【问题讨论】:

    标签: neo4j cypher neo4j-apoc


    【解决方案1】:

    来自apoc.index.addRelationship() 的文档/示例:

    该语句将创建与relationship-type同名的关系索引。

    这是关系索引的名称,也是要提供给removeRelationshipByName() 的名称。

    这个特定过程的命名相当混乱...ByName 部分指的是关系索引,而不是关系本身。

    【讨论】:

    • 谢谢,但这意味着我不能从所有索引中删除关系?必须为每个单独的请求,对吧?
    • 由于一个关系只能有一个类型,并且由于addRelationship() 只将每个关系添加到一个索引中,所以应该只有一个索引可以从(其类型)中删除关系。跨度>
    • 事实上 addRelationship() 为每种类型的关系创建一个索引,因此我可以使用单个查询运行触发器来更新每种关系类型的每个索引中所需的属性(如上)。但是,当我删除一个关系时,我似乎无法这样做——然后我必须为看起来像的每种关系类型设置一个触发器......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多