2015-01-15 1 views
1

지금까지 Cypher 쿼리로 요청을 보내고 응답을 다시 받기 위해 PHP Rest API를 사용하고있었습니다. 응답은 구문 분석하기가 어렵고 JSON으로 변환 할 수없는 거대한 문자열입니다. 이제 Neo4jPHP가 설치되었으며 사이퍼에 있던 동일한 쿼리를 작성하는 방법을 알아 내려고합니다. 이 내 쿼리입니다 :neo4jPHP를 사용하여 두 노드 사이의 모든 노드 이름을 얻는 방법

  MATCH (n:RealNode)-[r:contains*]-(z) WHERE n.gid='123' RETURN n,z;") 

내가 실제로 원하는 것은 내 n 개의 노드와 관련이있는 모든 노드 이름 (이름은 각 노드 내부의 재산)의 목록을 얻는 것입니다. 어떻게해야합니까?

온라인에서 Neo4jPHP onnline에 대한 많은 예제를 찾을 수 없으며 작동하지 않는 것으로 보입니다. 여기에서 최신 버전을 다운로드했습니다 (https://github.com/jadell/neo4jphp).

감사 D.

RE 편집 한 내가 neo4j 서버에서이 쿼리를 시도

:

 MATCH (n)-[r:KNOWS*]-(z) WHERE n.name='Arthur Dent' AND z.name='Ford Prefect' RETURN n,z,r; 

과 내가 서로 연결되어있는 모든 3 개 노드를 얻을. neo4jPHP를 통한 동일한 쿼리는 하나의 노드 이름 만 반환합니다. 왜 이런 일이 일어나는 걸까요? 당신은 여기 path, 패턴에 변수를 할당

MATCH path=(n {name:'Arthur Dent'])-[:KNOWS*]-(z {name:'Ford Perfect'}) 
RETURN [x in nodes(path) | x.name] as names 

:

 $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"; 
     } 

답변

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 아주 편리한 도구지만 매우 인기가 없습니다. 소규모 커뮤니티 및 온라인 몇 가지 예입니다. 희망이 사람을 도움이됩니다.

2

은 사이퍼 수준에서 당신은 같은 쿼리를 사용할 수 있습니다. RETURN에서 해당 경로의 모든 노드를 반복하고 name 속성을 추출합니다.

이 추가 힌트 :

  1. 고려 할당 라벨 예를 들어, Person을 노드에 추가하고 쿼리의 시작/끝 노드를 빠르게 검색하려면 선언적 인덱스 (CREATE INDEX ON :Person(name))를 사용하십시오.
  2. 가변 경로 길이는 [:KNOWS*]과 일치합니다. 그래프의 크기와 구조에 따라 상한선을 사용하십시오 이것은 다소 비쌀 수 있습니다. [:KNOWS*10]은 10도까지 제한됩니다.
+0

감사합니다. 그래서 neo4jPHP를 사용하지 말고 HTTP 요청 (PHP 또는 Python 사용)을 통해 이러한 사이퍼 쿼리를 실행하라고 제안합니까? – user1919

+0

실제로 내 문제는 내가 PHP로 할 때 응답은 내가 원하는 노드의 이름을 얻기 위해 구문 분석 할 수없는 거대한 문자열이라는 것입니다. – user1919

+2

neo4jphp를 사용하여 cypher 쿼리를 보낼 수 있으며 –