简体   繁体   English

使用jquery返回Neo4j密码查询的图结构

[英]return the graph structure of a Neo4j cypher query using jquery

based on The Neo4j docs , executing: 基于Neo4j docs ,执行:

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

in the neo4j browser returns the graph structure plus the rows. 在neo4j浏览器中,返回图形结构以及行。 I wonder how can I specify ( "resultDataContents":["graph","row"] ) in a jQuery ajax request. 我想知道如何在jQuery ajax请求中指定( "resultDataContents":["graph","row"] )。 I have tried this which doesn't work: 我已经尝试了这不起作用:

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"]} })
});

Essentially I want to build a neo4j browser clone where I can submit queries and receive the results and perhaps visualize them. 本质上,我想构建一个neo4j浏览器克隆,在其中我可以提交查询并接收结果,并可视化它们。

The result data formats are only available through the cypher http transactional endpoint : http://neo4j.com/docs/stable/rest-api-transactional.html#rest-api-return-results-in-graph-format 结果数据格式仅可通过密码http事务终结点使用:http: //neo4j.com/docs/stable/rest-api-transactional.html#rest-api-return-results-in-graph-format

Which is the one used by the neo4j browser. neo4j浏览器使用的那个。 Notice the difference between the two urls you mention. 请注意您提到的两个URL之间的区别。

Here is the whole procedure from query to obtaining the nodes and links of the graph. 这是从查询到获得图的节点和链接的整个过程。

Note that the neo4j docs (Converting Neo4j Query Results to D3 JSON) has an error : replace start with source and end with target if you want to use the graph for force directed layout. 请注意,neo4j 文档 (将Neo4j查询结果转换为D3 JSON)有一个错误:如果要将图形用于强制定向布局,请替换以source start和以target end

// 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!

    }

});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM