【问题标题】:How to best store/access node id's in neo4j/py2neo/python?如何在 neo4j/py2neo/python 中最好地存储/访问节点 ID?
【发布时间】:2025-12-28 16:40:11
【问题描述】:

一般来说,我是 neo4j 和图形数据库的新手,所以这可能是一个愚蠢的问题,但是通过 id 引用节点的最佳方式是什么,或者在现有关系之间形成关系的最佳方式是什么?节点和最近插入的节点?

现在,我的图表中有一个关键字列表作为单个节点,我正在收集传入的推文,然后在用户、推文和跟踪的关键字之间建立关系。为了通过 id 在本地存储关键字节点,我使用了一个字典,关键字作为键,节点 id 作为值,以便填充这个密码查询:

RELATE_TWEET_TO_KEYWORD = """\
MATCH (a:Tweet), (b:Keyword)
WHERE a.id = {tweet_id} AND id(b) = {keyword_id}
CREATE (a)-[r:REFERENCED]->(b)
RETURN r
"""

关键字很少更新,所以我只是有一个周期性的 celery 任务,每周都会腌制一个更新的关键字字典。

有没有更好或更有效的方法来做到这一点?我也在尝试尽量减少对服务器的调用。

谢谢。

【问题讨论】:

    标签: neo4j graph-databases py2neo


    【解决方案1】:

    您可以在节点属性上创建 node property uniqueness constraint 以断言该值是唯一的并将其视为 id。您不应在外部系统中使用 Neo4j 内部 id,因为如果删除节点,该 id 可能会被回收。

    例如:

    CREATE CONSTAINT ON (k:Keyword) ASSERT k.word IS UNIQUE;
    

    然后,您可以将 word 属性视为关键字节点的唯一 ID。这还会在唯一属性上创建一个索引,确保该属性的查找是有效的。

    【讨论】:

    • "您不应在外部系统中使用 Neo4j 内部 id,因为如果删除节点,该 id 可能会被回收。"啊,明白了,谢谢!