фона:Возможно ли запросить 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(), который живет здесь:
Этот пример предназначен для создания. Меня интересует запрос для поиска узла. Когда я выполняю такой запрос, я не возвращаю все обширные данные, показанные в этом примере. Я просто получаю данные на уровне домена, которые я создал. Может быть, мне нужно использовать конечную точку, которую делает этот пример, вместо конечной точки транзакции cypher? – MukRaker
См. Мой обновленный ответ. – cybersam
Спасибо! Похоже, это решит мою проблему. Попробуем это сегодня вечером. Так же, как и пояснение, работает ли этот пример для MATCH или только для инструкции CREATE? – MukRaker