【问题标题】:Order by Gremlin (on AWS Neptune) descending puts 0 at the top按 Gremlin 排序(在 AWS Neptune 上)降序将 0 放在顶部
【发布时间】:2021-06-09 14:07:09
【问题描述】:

我有一个 Neptune Gremlin 查询,它应该按其他用户保存顶点的次数降序排列顶点。它非常适用于属性值 > 0 的顶点,但由于某种原因,将属性值等于 0 的顶点放在顶部。

添加顶点时,创建的属性不带引号(因此不是字符串),并且在其他情况下增加属性时我可以对属性求和,因此它们都应该是数字。当按升序排序时,它也按预期工作(首先出现零值,然后排序正确)。

有没有人以前见过这种情况或知道为什么会发生这种情况?我不想预先过滤掉零值。

我的查询的相关部分如下(并且在排序不正确时的行为方式相同,但结果中有一些与此问题无关的内容),但我附上了完整查询的图片'正在使用它给出的结果g.V().hasLabel('trip').order().by('numSaves', desc)

Query and results

【问题讨论】:

  • 您好 - 我无法重现您所看到的内容。在我的测试中,我总是得到正确的排序。您的完整查询还有更多内容吗?它在屏幕截图中被裁剪掉了。您能否提供一些 addV 和 addE 步骤来构建示例图,以便使用您拥有的确切数据模型进行测试?
  • 完整的查询只是g.V().hasLabel('trip').has('published', true).where(out("hasDay").count().is(gt(0))).order().by('numSaves', desc).valueMap().select("location", "numSaves")
  • 我正在构建这样的顶点g.addV("trip").property("location", "Nashville").property("numSaves", 0),然后像这样增加值g.V("<the trip ID>").property(single, "numSaves", union(values("numSaves"), constant(1)).sum())
  • 再次嗨 - 我使用您提供的步骤创建了一个测试图,但我仍然无法重现您所看到的内容。我得到了预期的排序,所有零值最后出现。我不知道以前版本的引擎有任何问题,但请您分享您正在使用的引擎版本(来自%status)。我使用'dbEngineVersion': '1.0.4.2.R2' 进行了测试
  • 感谢您的回复。我正在使用“dbEngineVersion”:“1.0.4.1.R4”和“gremlin”:{“version”:“tinkerpop-3.4.8”}。我注意到当我创建像 g.addV("random").property("location", "test1").property("numSaves",0)g.addV("random").property("location", "test2").property("numSaves",10) 这样的顶点时它工作得很好。但是,当我将它们全部设置为零然后通过此步骤递增时:g.V("<id of one vertex>").property(single, "numSaves", union(values("numSaves"), constant(1)).sum()) 它会使它们乱序,而那些从未递增。我不小心改变了类型吗?

标签: gremlin amazon-neptune


【解决方案1】:

感谢非常有用的附加信息,我能够重现该问题。在短期内,使用fold().unfold() 的解决方法将起作用,因为它会导致通过查询引擎采用不同的代码路径。当有更多信息可用时,我会更新这个答案。该问题似乎与sum 步骤有关。另一个对我有用的解决方法是使用sack 来执行“添加”。不是一个非常优雅的查询,但它似乎确实避免了order 问题。

g.V("some-id").
  property(single, "numSaves",             
           sack(assign).by('numSaves').
           sack(sum).by(constant(1)).sack())

2021 年 7 月 29 日更新:

Amazon Neptune 更新 (1.0.5.0) 刚刚发布,其中包含针对此问题的修复。

【讨论】:

  • 感谢 Kelvin 和 Fook!这些解决方案奏效了!
  • 我可以确认这次 Neptune 更新解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
相关资源
最近更新 更多