2015-04-03 2 views
2

основан на Neo4j docs, выполнение:вернуть граф структуру шифровальщика запроса Neo4j с использованием JQuery

:POST /db/data/transaction/commit 
    {"statements":[{"statement":"MATCH path = (n)-[r]->(m) RETURN path", 
        "resultDataContents":["graph","row"]}]} 

в браузере Neo4j возвращает структуру графа плюс строки. Интересно, как я могу указать ("resultDataContents":["graph","row"]) в запросе ajax jQuery. Я попробовал это, не работает:

var request = $.ajax({ 
    type: "POST", 
    url: "http://localhost:7474/db/data/cypher", 
    accepts: { json: "application/json" }, 
    dataType: "json", 
    contentType:"application/json", 
    data: JSON.stringify({ "query" : "MATCH (n)--(m) RETURN n,m LIMIT 2", "params": {"resultDataContents":["graph","row"]} }) 
}); 

По существу я хочу построить клон Neo4j браузера, где я могу представить запросы и получать результаты и, возможно, визуализировать их.

ответ

2

Вот вся процедура от запроса до получения узлов и ссылок на график.

Обратите внимание, что Neo4j docs (Преобразование Neo4j результатов запроса к D3 JSON) имеет ошибку: заменить start с source и end с target, если вы хотите использовать график для силы, направленной макете.

// The query 
var query= {"statements":[{"statement":"MATCH p=(n)-->(m)<--(k),(n)--(k) RETURN p Limit 100", 
    "resultDataContents":["graph","row"]}]}; 

//the helper function provided by neo4j documents 
function idIndex(a,id) { 
    for (var i=0;i<a.length;i++) { 
     if (a[i].id == id) return i;} 
    return null; 
} 
// jQuery ajax call 
var request = $.ajax({ 
    type: "POST", 
    url: "http://localhost:7474/db/data/transaction/commit", 
    accepts: { json: "application/json" }, 
    dataType: "json", 
    contentType:"application/json", 
    data: JSON.stringify(query), 
    //now pass a callback to success to do something with the data 
    success: function (data) { 
     // parsing the output of neo4j rest api 
     data.results[0].data.forEach(function (row) { 
      row.graph.nodes.forEach(function (n) { 
       if (idIndex(nodes,n.id) == null){ 
        nodes.push({id:n.id,label:n.labels[0],title:n.properties.name}); 
       } 
      }); 
      links = links.concat(row.graph.relationships.map(function(r) { 
       // the neo4j documents has an error : replace start with source and end with target 
       return {source:idIndex(nodes,r.startNode),target:idIndex(nodes,r.endNode),type:r.type}; 
      })); 
     }); 
     var graph = {nodes:nodes, links:links}; 

     // Now do something awesome with the graph! 

    } 

}); 
+0

Что такое «узлы», которые должны здесь ссылаться: 'if (idIndex (nodes, n.id) == null) {'? Я принимаю только глобальный массив. –

+0

@PeteyB Да, у него отсутствует объявление 'var nodes = [], links = [];' –

4

Форматы данных результатов доступны только через шифровальщика HTTP транзакционной конечной точки: http://neo4j.com/docs/stable/rest-api-transactional.html#rest-api-return-results-in-graph-format

Какой один используется Neo4j браузер. Обратите внимание на разницу между двумя указанными вами URL-адресами.

+0

Спасибо. Как я могу отправить XHR этим конечным точкам? Как делает браузер Neo4j? Не могли бы вы объяснить немного больше? – MostafaMV

+2

RTFM-помощник, это только данные, которые немного отличаются от устаревшей конечной точки Cypher. Данные json выглядят следующим образом (как указано в документации) { "statements": [{ "statement": "CREATE (bike: Bike {weight: 10}) CREATE (переднее колесо: Wheel {spokes: 3}) CREATE (задняя колесо: Колесо {спицы: 32}) CREATE p1 = (bike) - [: HAS {position: 1}] -> (frontWheel) CREATE p2 = (bike) - [: HAS {position: 2}] -> (backWheel) RETURN bike, p1, p2 ", " resultDataContents ": [" row "," graph "] }] } –

+0

Пожалуйста, разместите фактические URL-адреса конечных точек, которые вы сравниваете, вместо ссылок на документы. Ссылка, которую вы указали, устарела. –

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