直到现在我才使用PHP Rest Api来发送带有cypher查询的请求并获得回复。响应是一个巨大的字符串,这使得难以解析并且无法转换为JSON。 我现在安装了Neo4jPHP,我试图弄清楚如何编写我在cypher中的相同查询。 这是我的问题:
MATCH (n:RealNode)-[r:contains*]-(z) WHERE n.gid='123' RETURN n,z;")
我真正想要的是获取与我的n节点相关的节点的所有名称(名称是每个节点内的属性)的列表。我该怎么做?
我找不到Neo4jPHP onnline的很多例子,我发现的那些例子似乎无法工作。我从这里下载了最新版本(https://github.com/jadell/neo4jphp)。
由于 d。
重新编辑
我在neo4j服务器中尝试此查询:
MATCH (n)-[r:KNOWS*]-(z) WHERE n.name='Arthur Dent' AND z.name='Ford Prefect' RETURN n,z,r;
我得到了所有相互连接的3个节点。通过neo4jPHP的相同查询将仅返回一个节点的名称。为什么会这样?
$querystring="MATCH path=(n:RealNode {gid:'58731'})-[:contains*]-(z) RETURN [x in nodes(path) | x.id] as names";
$query=new Everyman\Neo4j\Cypher\Query($client,$querystring);
$result=$query->getResultSet();
print_r($result);
foreach($result as $row){
echo $row['x']->getProperty('name') . "\n";
}
答案 0 :(得分:2)
在Cypher级别,您可以使用如下查询:
MATCH path=(n {name:'Arthur Dent'])-[:KNOWS*]-(z {name:'Ford Perfect'})
RETURN [x in nodes(path) | x.name] as names
您可以在此处path
为模式指定变量。在RETURN
中,您遍历该路径上的所有节点并提取其name
属性。
另外两个提示:
Person
到您的节点并使用声明性索引(CREATE INDEX ON :Person(name)
)来加快查询查询的开始/结束节点[:KNOWS*]
考虑使用上限,根据图表的大小和结构,这可能会相当昂贵。 [:KNOWS*10]
限制在10度。答案 1 :(得分:1)
经过Stefan Armbruster的大量尝试和帮助后,我使用了Neo4jPHP。 这是它的外观:
$client = new Everyman\Neo4j\Client();
$querystring="MATCH path=(n {gid:'58731'})-[:contains*]-(z) RETURN LAST([x in nodes(path) | x.id]) as names";
$query=new Everyman\Neo4j\Cypher\Query($client,$querystring);
$result=$query->getResultSet();
foreach($result as $resultItem){
$resultArray[] = $resultItem['n'];
}
print_r($resultArray); // prints the array
Neo4jPHP是非常方便的工具,但不是很受欢迎。小社区和在线的几个例子。希望这有助于某人。