我使用的是python neo4j驱动程序(5.5.0)来查询neo4j aura数据库中的数据,以便在我的python应用程序中使用。(构建图形可视化),因为它只返回节点属性,而不返回ID/标签。没有连接节点的id(虽然它确实给予了连接节点的属性)。2但是我真的很想有id来保证图的一致性。
我有以下neo4j Cypher查询
f" MATCH (d:Document)",
f" WHERE d.doc_id IN {doc_ids}",
f" UNWIND d as doc",
f" CALL {{",
f" WITH doc",
f" MATCH (doc:Document)-[de:CONTAINS_ENTITY]->(e:Entity_node)-[ec:ENTITY_CONCEPT_ASSOCIATION]->(c: Concept)",
f" WITH doc, ",
f" {{ sub: doc, rel_id: id(de), rel_type: type(de), obj: e }} as contains,",
f" {{ sub: e, rel_id: id(ec), rel_type: type(ec), obj: c }} as represents LIMIT {num_of_ents}"
f" MATCH (a:Author)-[ad:AUTHORED]->(doc)",
f" RETURN",
f" {{ contains: contains, represents: represents }} as entities,",
f" {{ sub: a, rel_id: id(ad), rel_type: type(ad), obj: doc }} as authors",
f" }}",
f" RETURN doc, collect(entities) as entities, collect(authors) as authors"
传递给neo4j驱动程序的session.run()函数
它有点复杂,而且基本上不相关,所以假设这是查询
f" MATCH (d:Document)",
f" WHERE d.doc_id IN {doc_ids}",
f" RETURN d"
这将返回如下响应..
[
{
"d": {
"title": "Coronavirus and paramyxovirus in bats from Northwest Italy",
"doc_id": "a03517f26664be79239bcdf3dbb0966913206a86"
}
},
...
]
然而,在neo4j浏览器中,相同的查询将返回不同格式的响应
[
{
"identity": 23016,
"labels": [
"Document"
],
"properties": {
"title": "Coronavirus and paramyxovirus in bats from Northwest Italy",
"doc_id": "a03517f26664be79239bcdf3dbb0966913206a86"
},
"elementId": "23016"
},
...
]
这些响应包含节点的id和应用程序所需的标签,而且关系也包含开始和结束id。
我如何使用neo4j python驱动程序获得这些值?我尝试了Result & Record对象上所有可用的函数[data(),values(),items()],但没有一个给予id/标签。graph()函数给节点提供id,但根本没有关系(空列表)。
我知道在Cypher查询本身中使用id()和labels()函数,但考虑到查询的大小,这似乎会大大增加响应时间。
graph()函数有id这个事实告诉我,初始的Result对象在某个地方有id,我该如何访问它?
1条答案
按热度按时间rkttyhzu1#
属性“id”和“labels”由neo4j数据库管理。要访问此属性,您必须使用文档的https://neo4j.com/docs/cypher-manual/current/functions/中描述的内置密码函数。
根据您的简化示例,获取标签和ID的过程如下所示:
或者假设“your”doc_id是搜索的节点id,并且您只想在WHERE子句中将其与外部参数“doc_ids”进行比较:
标签以“字符串列表”(一种密码数据类型)的形式返回,其中包含了节点上附加的所有标签,id是一个整数值。
查询的结果应如下所示:
你好,奥顿纳瓦尔