【问题标题】:Working with indexes in neo4j and py2neo在 neo4j 和 py2neo 中使用索引
【发布时间】:2014-05-19 04:39:04
【问题描述】:

我刚刚开始使用 py2neo 和 neo4j。

我对如何在我的数据库中使用索引感到困惑。

我创建了一个 create_user 函数:

g = neo4j.GraphDatabaseService()
users_index = g.get_or_create_index(neo4j.Node, "Users")
def create_user(name, username, **kwargs):
    batch = neo4j.WriteBatch(g)
    user = batch.create(node({"name" : name, "username" : username}))
    for key, value in kwargs.iteritems():
        batch.set_property(user, key, value)
    batch.add_labels(user, "User")
    batch.get_or_add_to_index(neo4j.Node, users_index, "username", username, user)
    results = batch.submit()
    print "Created: " + username

现在通过用户名获取用户:

def lookup_user(username):
    print node(users_index.get("username", username)[0])

我看到Schema 类,注意到我可以在"User" 标签上创建索引,但我不知道如何获取索引并向其添加实体。

我希望它尽可能高效,那么在"User" 标签上添加索引是否会提高性能,以防我稍后添加更多具有不同标签的节点?它已经是最有效的了吗?

另外,如果我希望我的用户名系统对每个用户都是唯一的,我该如何做到这一点?我如何知道batch.get_or_add_to_index 是获取还是添加实体?

【问题讨论】:

    标签: neo4j py2neo


    【解决方案1】:

    您的困惑是可以理解的。 Neo4j 中实际上有两种类型的索引 - 旧索引(您可以使用 get_or_create_index 方法访问)和新索引(处理基于标签的索引)。

    新索引不需要手动更新,它们会在您对图表进行更改时保持同步,并在您针对该标签/属性对发出密码查询时自动使用。

    保留旧索引的原因是它们支持新索引尚不可用的一些复杂功能,例如地理空间索引、全文索引和复合索引。

    【讨论】:

    • 谢谢,这让我明白了很多。如何根据标签索引访问具有属性的节点?你会建议我在我的用例中坚持使用旧索引吗?
    • 架构索引会自动工作,在您创建它们之后,节点会由索引属性自动添加和删除。它们也被密码自动使用,例如MATCH (u:User {name:"foo"}) RETURN u
    • 如何使用 py2neo 查询数据库?我会使用ReadBatch.get_indexed_nodes 吗?我会为 index 参数使用什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    相关资源
    最近更新 更多