2015-02-04 2 views
1

фона:Возможно ли запросить Neo4J db с помощью Cypher с помощью REST API и вернуть URI узла?

Я использую локально запустить экземпляр Neo4j (на локальном хосте: 7474), и доступ к нему через адаптер Java, который использует Cypher через REST API (с Джерси), и делает данные доступными для моего Grails приложение работает на том же сервере.

Вопрос:

Можно ли запросить Neo4j дБ с использованием Cypher, через REST API, и возвращает URI узла? Прямо сейчас, я могу проверить статус сервера Neo4J, создавать узлы, заполнять свойства узлов, запрашивать и создавать отношения. Моя проблема заключается в том, что для моего кода «добавить отношения» и обхода требуется URI узлов в качестве входных данных. Я могу запросить узлы и получить правильный JSON, описывающий результаты, но я не могу найти места URI.

Вот упрощенная версия моего getUserByEmail кода:

public URI getUserByEmail(String email) 
{ 
    System.out.println("GETTING USER BY EMAIL [" + email + "]..."); 

    String queryStr = "MATCH (user) WHERE user.nodetype=\'user\' and user.email=\'" + email + "\' RETURN user"; 

    WebResource webResource = client.resource(ROOT_URI + "/transaction/commit"); 

    String payload = "{\"statements\" : [ {\"statement\" : \"" + queryStr + "\"} ]}"; 

    ClientResponse response = webResource 
     .accept(MediaType.APPLICATION_JSON) 
     .type(MediaType.APPLICATION_JSON) 
     .entity(payload) 
     .post(ClientResponse.class); 

    String responseStr = response.getEntity(String.class); 
    URI responseLocation = response.getLocation(); 

    System.out.println("RESPONSE STRING: " + responseStr); 
    System.out.println("GOT USER AT: [" + responseLocation + "]"); 

    return responseLocation; 
} 

Результаты JSON возвращаются в порядке и отражать то, что в графе дб. Однако местоположение всегда равно нулю.

Код «Добавить отношения», который я использую, работает, если у меня есть URI для стартового узла. Код у меня есть на основе кода addRelationship(), который живет здесь:

https://github.com/neo4j/neo4j/blob/2.1.6/community/server-examples/src/main/java/org/neo4j/examples/server/CreateSimpleGraph.java

ответ

2

В ваших результатах JSON значение свойства self для каждого «пользователя» будет его URI.

In this example, ответ имеет 2 "n" узлов, а значение свойства self каждого - это его URI.

Here is an example как получить транзакционную конечную точку (которая обычно менее подробно, чем устаревшая конечная точка), чтобы вернуть свойство self.

+1

Этот пример предназначен для создания. Меня интересует запрос для поиска узла. Когда я выполняю такой запрос, я не возвращаю все обширные данные, показанные в этом примере. Я просто получаю данные на уровне домена, которые я создал. Может быть, мне нужно использовать конечную точку, которую делает этот пример, вместо конечной точки транзакции cypher? – MukRaker

+0

См. Мой обновленный ответ. – cybersam

+0

Спасибо! Похоже, это решит мою проблему. Попробуем это сегодня вечером. Так же, как и пояснение, работает ли этот пример для MATCH или только для инструкции CREATE? – MukRaker

2

Вы можете в случае создать узел Uri себя, просто добавляя узел внутреннего идентификатора к следующему адресу:

http://localhost:7474/db/data/node/your-123-id

Возможно, вы хотите установить схему, хост и порт базы данных в файле конфигурации, чтобы не изменять жесткие коды при изменении местоположения базы данных.

+0

Где я могу получить внутренний идентификатор? Все, что я верну в ответ JSON, это фактические данные, которые я создал в узле. – MukRaker

+1

match (n) return id (n) –

Смежные вопросы