关系属性上的Neo4j手动索引

关系属性上的Neo4j手动索引,neo4j,spring-data-neo4j,neo4j-apoc,spring-data-neo4j-5,Neo4j,Spring Data Neo4j,Neo4j Apoc,Spring Data Neo4j 5,我将在我的应用程序中尝试,以解决我面临的性能问题 我有几个问题在官方Neo4j文档中不清楚: 该语句将创建与相同名称的关系索引 关系类型,在本例中为目的地和添加关系 将其属性添加到索引中 何时需要创建此关系索引?它应该执行一次(比如在应用程序启动时),或者每次在航班和机场节点之间添加新的-[r:DESTINATION]>关系时,我是否需要调用此APOC函数 如果存在-[r:DESTINATION]->关系更新,如何在适当的手动索引中更新此信息 如果删除一些航班或机场节点,我是否需要手动从手动索引

我将在我的应用程序中尝试,以解决我面临的性能问题

我有几个问题在官方Neo4j文档中不清楚:

该语句将创建与相同名称的关系索引 关系类型,在本例中为目的地和添加关系 将其属性添加到索引中

  • 何时需要创建此关系索引?它应该执行一次(比如在应用程序启动时),或者每次在
    航班
    机场
    节点之间添加新的
    -[r:DESTINATION]>
    关系时,我是否需要调用此APOC函数

  • 如果存在
    -[r:DESTINATION]->
    关系更新,如何在适当的手动索引中更新此信息

  • 如果删除一些
    航班
    机场
    节点,我是否需要手动从手动索引中查找并删除相应的
    -[r:DESTINATION]->
    关系,或者由APOC和Neo4j自动完成

  • 对于SpringDataNeo4J项目,如何正确执行包含APOC函数的查询?例如,我想调用
    apoc.index.addRelationship
    ,以便为关系属性创建手动索引。我可以为此使用
    org.neo4j.ogm.session.session.query

  • 手动索引使用的一致性模型是什么?索引和原始数据之间使用的是最终一致性模型还是强一致性模型


  • 我同意Neo4J在这个问题上的文档确实不够充分

    回答您的问题:

    1.如果您从使用自动关系索引的较旧版本升级Neo4J,则需要运行APOC(仅一次)以使用以下内容索引现有关系:

    MATCH()-[r]->()调用apoc.index.addRelationship(r,['property_1','property_2'])返回计数(*)

    然后,您需要为添加到该索引中的任何新关系设置一个触发器,运行一次类似以下的操作:

    调用apoc.trigger.add('RELATIONSHIP_INDEX','diswind{createdRelationships}作为r MATCH()-[r]->()调用apoc.INDEX.addRelationship(r,['property_1','property_2'])返回计数(*),{phase:'after'}

    (之前需要在
    neo4j.conf
    文件中激活
    apoc.trigger.enabled=true

    2.见上文

    3.您还需要从索引中删除它们,这不是自动完成的。为此,使用
    removeRelationshipByName()
    设置APOC触发器

    4.应该是可能的

    5.Neo4J的人应该回答这个问题


    希望这能帮你节省一些时间

    @alexanoid我关于删除关系的想法是不对的。它们不会自动从索引中删除。我用正确的答案修改了上面的答案。
    MATCH (:Flight)-[r:DESTINATION]->(:Airport)
    CALL apoc.index.addRelationship(r,['taxi_time'])
    RETURN count(*)