Поиск по индексу Neo4j с использованием Neo4J-REST-PHP-API-client

#php #indexing #lookup #neo4j

#php #индексирование #поиск #neo4j

Вопрос:

Я не могу заставить поиск по индексу работать с клиентом PHP API.

Сначала я создаю узел и индексирую его. Это работает нормально. Затем, когда я тестирую поиск

 curl -H Accept:application/json http://localhost:7474/db/data/index/node/my_nodes/guid/108
  

Я получаю:

 [ {
  "indexed" : "http://localhost:7474/db/data/index/node/my_nodes/guid/108/57",
  "outgoing_relationships" : "http://localhost:7474/db/data/node/57/relationships/out",
  "data" : {
    "guid" : 108,
    "title" : "New User ABC",
    "owner_guid" : "2"
  },
  "traverse" : "http://localhost:7474/db/data/node/57/traverse/{returnType}",
  "all_typed_relationships" : "http://localhost:7474/db/data/node/57/relationships/all/{-list|amp;|types}",
  "property" : "http://localhost:7474/db/data/node/57/properties/{key}",
  "self" : "http://localhost:7474/db/data/node/57", .... 
  

Пока все хорошо. Однако, когда я определяю функцию следующим образом в клиенте PHP API для выполнения поиска.

 public function getNodeByKey ($key, $value) 
{ 
    $uri = $this->base_uri . 'index/node/my_nodes/' . $key . '/' . $value ;
    list($response, $http_code) = HTTPUtil::jsonGetRequest($uri); 
    if ($http_code == 200) 
        return Node::inflateFromResponse($this, $response);
    else { 
        throw new HttpException($http_code);
    } 
}
  

и вот как я вызываю вышеупомянутую функцию:

 $graphDb = new GraphDatabaseService('http://localhost:7474/db/data/');
...
$node = $graphDb->getNodeByKey ('guid', $uid);              
$relationship = $node->createRelationshipTo($another_node, 'works with');
$relationship->save();
  

Я получаю HTTP-ответ размером 200 от getNodeByKey(). Однако, когда я пытаюсь сохранить взаимосвязь, я получаю 404. Я попытался использовать dump_node () для тестирования, и узел, который я пытался найти, т. е. $ node, был нулевым. Я не могу понять, где я ошибаюсь. Есть какие-нибудь указания?

Заранее спасибо, Нанда

Ответ №1:

Нанда, не могли бы вы попробовать вывести индексированный узел с помощью curl также, согласно http://docs.neo4j.org/chunked/snapshot/rest-api.html ?

Комментарии:

1. Пит, да, я смог получить доступ к узлу, используя индекс, используя curl, но не смог заставить его работать с клиентом PHP API. Тем не менее, я разобрался с проблемой. Я вскоре опубликую ответ.

Ответ №2:

Я, наконец, смог заставить это работать, используя клиент PHP API. Мне пришлось изменить функцию inflateFromResponse на следующую. Я не уверен, что это проблема с версией neo4j, которую я использую (а именно 1.2)

 public static function inflateFromResponse($neo_db, $response)
{

    $node = new Node($neo_db);
    $node->_is_new = FALSE;
    $node->_id = end(explode("/", $response[0]['self']));
    $node->setProperties($response[0]['data']);

    return $node;
}