我刚开始使用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
Run Code Online (Sandbox Code Playgroud)
现在通过用户名获取用户:
def lookup_user(username):
print node(users_index.get("username", username)[0])
Run Code Online (Sandbox Code Playgroud)
我看到了Schema类,并注意到我可以在"User"标签上创建索引,但我无法弄清楚如何获取索引并向其添加实体.
我希望它尽可能高效,所以"User"如果我稍后要添加更多带有不同标签的节点,那么在标签上添加索引会增加性能吗?它已经是最有效的了吗?
另外,如果我希望我的用户名系统对每个用户来说是唯一的,我怎么能这样做?我如何知道batch.get_or_add_to_index是获得还是添加实体?
你的困惑是可以理解的.Neo4j中实际上有两种类型的索引 - Legacy Indexes(使用get_or_create_index方法访问)和新索引(处理基于标签的索引).
新索引不需要手动保持最新,它们会在您对图形进行更改时保持同步,并在您针对该标签/属性对发出密码查询时自动使用.
保留遗留索引的原因是它们支持一些尚未用于新索引的复杂功能 - 例如地理空间索引,全文索引和复合索引.
| 归档时间: |
|
| 查看次数: |
751 次 |
| 最近记录: |