使用Neo4jClient Cypher查询的排序顺序不正确

时间:2013-05-15 06:18:02

标签: neo4jclient

我有以下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。

1 个答案:

答案 0 :(得分:3)

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

将最后三行更改为:

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

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

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

    1. http://hg.readify.net/neo4jclient/wiki/cypher阅读doco(我们写这篇文章是有原因的)
    2. 阅读该页面上的“调试”部分,该部分告诉您如何获取查询文本
    3. 将查询文本与您希望运行的内容进行比较
    4. 解决差异(如果是库错误,请在http://hg.readify.net/neo4jclient/issues/new报告问题)