我正在构建一个带有标签节点和 url 节点的数据库,并且 url 节点连接到标签节点。在这种情况下,如果将相同的 url 插入到数据库中,它应该链接到标记节点,而不是创建重复的 url 节点。我认为索引可以解决这个问题。如何使用 neo4jrestclient 进行索引和遍历?链接到教程就可以了。我目前正在使用versae neo4jrestclient。
谢谢
我正在构建一个带有标签节点和 url 节点的数据库,并且 url 节点连接到标签节点。在这种情况下,如果将相同的 url 插入到数据库中,它应该链接到标记节点,而不是创建重复的 url 节点。我认为索引可以解决这个问题。如何使用 neo4jrestclient 进行索引和遍历?链接到教程就可以了。我目前正在使用versae neo4jrestclient。
谢谢
neo4jrestclient 支持索引和遍历图形,但我认为仅使用索引可能足以满足您的用例。但是,我不知道我是否正确理解了您的问题。无论如何,这样的事情可以工作:
>>> from neo4jrestclient.client import GraphDatabase
>>> gdb = GraphDatabase("http://localhost:7474/db/data/")
>>> idx = gdb.nodes.indexes.create("urltags")
>>> url_node = gdb.nodes.create(url="http://foo.bar", type="URL")
>>> tag_node = gdb.nodes.create(tag="foobar", type="TAG")
我们将属性添加count
到关系中以跟踪"http://foo.bar"
使用 tag 标记的 URL 的数量foobar
。
>>> url_node.relationships.create(tag_node["tag"], tag_node, count=1)
之后,我们根据 URL 的值索引 url 节点。
>>> idx["url"][url_node["url"]] = url_node
然后,当我需要创建一个用 TAG 节点标记的新 URL 节点时,我们首先查询索引以检查它是否已编入索引。否则,我们创建节点并为其编制索引。
>>> new_url = "http://foo.bar2"
>>> nodes = idx["url"][new_url]
>>> if len(nodes):
... rel = nodes[0].relationships.all(types=[tag_node["tag"]])[0]
... rel["count"] += 1
... else:
... new_url_node = gdb.nodes.create(url=new_url, type="URL")
... new_url_node.relationships.create(tag_node["tag"], tag_node, count=1)
... idx["url"][new_url_node["url"]] = new_url_node
一个重要的概念是索引是键/值/对象三元组,其中对象是要索引的节点或关系。
创建和使用索引的步骤:
创建图形数据库 rest 客户端的实例。
from neo4jrestclient.client import GraphDatabase
gdb = GraphDatabase("http://localhost:7474/db/data/")
创建节点或关系索引(在此处创建节点索引)
index = gdb.nodes.indexes.create('latin_genre')
将节点添加到索引
nelly = gdb.nodes.create(name='Nelly Furtado')
shakira = gdb.nodes.create(name='Shakira')
index['latin_genre'][nelly.get('name')] = nelly
index['latin_genre'][shakira.get('name')] = shakira
根据索引获取节点并做进一步处理:
for artist in index['latin_genre']['Shakira']:
print artist.get('name')
更多细节可以从webadmin中的注释中找到
Neo4j 有两种类型的索引,节点索引和关系索引。使用节点索引,您可以索引和查找节点,而使用关系索引,您可以对关系执行相同的操作。
每个索引都有一个提供者,它是处理该索引的底层实现。默认提供者是 lucene,但您可以根据需要创建自己的索引提供者。
Neo4j 索引采用键/值/对象三元组(“对象”是一个节点或关系),它将索引键/值对,并将其与提供的对象相关联。在为一组键/值/对象三元组建立索引后,您可以查询索引并获取使用与您的查询匹配的键/值对索引的对象。
例如,如果您的数据库中有“用户”节点,并希望通过用户名或电子邮件快速找到它们,您可以创建一个名为“用户”的节点索引,并为每个用户索引用户名和电子邮件。使用默认的 lucene 配置,您可以使用如下查询搜索“用户”索引:“用户名:bob 或电子邮件:bob@gmail.com”。
您可以使用数据浏览器以这种方式查询您的索引,上述查询的语法是“node:index:Users:username:bob OR email:bob@gmail.com”。