1

我有以下 Neo4jClient 代码

var queryItem = _graphClient
        .Cypher
        .Start(new
        {
            n = Node.ByIndexLookup("myindex", "Name", sku),
        })
        .Match("p = n-[r:Relationship]->ci")
         .With("ci , r")
         .Return((ci, r) => new
         {
             N = ci.Node<Item>(),
             R = r.As<RelationshipInstance<Payload>>()
         })
         .Limit(5)
         .Results
         .OrderByDescending(u => u.R.Data.Frequency);

查询执行良好,但结果未正确排序(即按降序排列)。这里也是 Payload 类。

如果您发现我的代码有问题,请告诉我。TIA。

4

1 回答 1

3

您在.Results通话后进行排序。这意味着您是在 .NET 中执行此操作,而不是在 Neo4j 上。Neo4j 返回任意 5 个结果,因为 Cypher 查询不包含排序指令。

将最后三行更改为:

.OrderByDescending("r.Frequency")
.Limit(5)
.Results;

作为一般调试技巧,Neo4jClient 做了两件事:

  1. 它可以帮助您使用流畅的界面构建 Cypher 查询。
  2. 它为您执行这些查询。这是一个相当愚蠢的过程:我们将文本发送到 Neo4j,然后它会返回对象。

执行显然是有效的,因此您需要找出查询不同的原因。

  1. http://hg.readify.net/neo4jclient/wiki/cypher阅读文档(我们写它是有原因的)
  2. 阅读该页面上的“调试”部分,该部分告诉您如何获取查询文本
  3. 将查询文本与您期望运行的文本进行比较
  4. 解决差异(如果是库错误,请在http://hg.readify.net/neo4jclient/issues/new报告问题)
于 2013-05-15T06:38:03.410 回答