小编Ans*_*hul的帖子

图的任意两个节点之间的最长最短路径

我想在我的Neo4j数据库中找到两个彼此相距最远的节点.出于我的分析的目的,我正在考虑两个节点之间的最短距离作为它们之间的距离.因此,最远的两个节点将在它们之间具有最长的最短路径.我使用Cypher的以下语法来查找最短的节点.

给定Neo4j示例文档http://docs.neo4j.org/chunked/milestone/query-match.html#match-shortest-path中显示的两个节点,我可以运行以下Cypher查询.

MATCH p = shortestPath((martin:Person)-[*..15]-(oliver:Person))
WHERE martin.name = 'Martin Sheen' AND oliver.name = 'Oliver Stone'
RETURN p
Run Code Online (Sandbox Code Playgroud)

我的数据库有超过50万个节点.蛮力的方式显然需要很长时间.有没有简单或更快的方法来获得这两个节点?

[作为一个额外的皱纹...图表被加权,但这个细节可以忽略.]

neo4j cypher

3
推荐指数
1
解决办法
2842
查看次数

在Neo4jClient Cypher Query中返回多个列

我使用Azure并发现性能很慢.为了减少往返时间,我将以下查询分成一个查询.

var queryItem = _graphClient
            .Cypher
            .Start(new
            {
                n = Node.ByIndexLookup("item_idx", "SKU", sSKU1),
            })
             .Return<Node<Item>>("n");
Run Code Online (Sandbox Code Playgroud)

代码中的其他地方我有以下语句

var queryItem = _graphClient
            .Cypher
            .Start(new
            {
                m = Node.ByIndexLookup("item_idx", "SKU", sSKU2),
            })
             .Return<Node<Item>>("m");
Run Code Online (Sandbox Code Playgroud)

我试图将上面两个查询组合成一个像这样的查询

var queryItem = _graphClient
            .Cypher
            .Start(new
            {
                n = Node.ByIndexLookup("item_idx", "SKU", sSKU1),
                m = Node.ByIndexLookup("item_idx", "SKU", sSKU2),
            })
             .Return<Node<Item>>("n");
Run Code Online (Sandbox Code Playgroud)

我知道上面仅针对单列,所以我尝试使用以下return语句

.Return((n, m) => new
        {
            N = n.CollectAs<Node<Item>>(),
            M = m.CollectAs<Node<Item>>()
        });
Run Code Online (Sandbox Code Playgroud)

但是我对以下声明有疑问

Node<Item> item1 = itemQueryResult.First();
Run Code Online (Sandbox Code Playgroud)

它说错误不能隐式地将类型'AnonymousType#1'转换为'Neo4jClient.Node.

你能建议一个简单的语法或返回多列以及提取第一个节点的方法吗?TIA.

neo4jclient

2
推荐指数
1
解决办法
1070
查看次数

Cypher Query - 返回每个匹配关系的权重与总权重

我试图在以下示例中找到百分比

START n=node:name_idx(NAME="ABC")
match p = n-[r1:LIKES]->m
with r1.Frequency as Frequency, Sum(r1.Frequency) as Sum
return Frequency, Sum
Run Code Online (Sandbox Code Playgroud)

我希望得到这样的东西

Frequency        Sum
12               19
6                19
1                19
Run Code Online (Sandbox Code Playgroud)

等等.

我得到的是Frequency和Sum列中的相同值

 Frequency        Sum
    12               12
    6                6
    1                1
Run Code Online (Sandbox Code Playgroud)

有什么建议如何正确分配?我的最终目标是通过划分返回行的频率/总和来找出百分比.谢谢

neo4j cypher

2
推荐指数
1
解决办法
1035
查看次数

标签 统计

cypher ×2

neo4j ×2

neo4jclient ×1