如何在gremlin中触发匹配查询。使用java驱动程序过滤查询在cosmos db中不起作用

问题描述 投票:0回答:1

我有两个类似方法的问题陈述。我可以在两者中放入一个包含或类似的查询来解决我在gremlin中的问题:

1)当outE()(如下面的gremlin查询中所示)具有包含print的标签时,返回以下查询中的顶点'a'。

GV()。hasLabel( '网址')。有( '名', 'sw10707')为( 'A')。欧特( '打印')。有( '前进', '州')。INV() 。选择一个')

2)返回如下所述的所有顶点,其边缘标签中包含print:

g.V()。hasLabel( '网址')。有( '名', 'sw10707')为( 'A')。欧特( '打印')。有( '前进', '州')。INV()

此查询无效:gV()。hasLabel('url')。has('name','sw10707')。as('a')。outE()。filter(it.name.matches('。pri) '))。

一个问题已经打开.net驱动程序(但我无法找到与java类似的功能):https://github.com/Azure/azure-cosmosdb-dotnet/issues/473

nosql azure-cosmosdb gremlin tinkerpop3
1个回答
0
投票

这遍历:

g.V().hasLabel('url').
  has('name','sw10707').as('a').
  outE().filter(it.name.matches('.pri.'))

需要在filter()中使用lambda表达式,并且应该将其写为Groovy闭包:

g.V().hasLabel('url').
  has('name','sw10707').
  outE().filter{it.name.matches('.pri.')}

不幸的是,CosmosDB不支持lambdas,因此您的遍历将失败。在这个时候,没有一种解决方法,我知道没有返回边缘在客户端上过滤它们然后使用它们开始第二次遍历...不是很好。希望你提出的问题很快就能带来一些缓解。

请注意,我在该问题上评论说TinkerPop正在考虑使这些文本谓词可用 - 讨论是here

© www.soinside.com 2019 - 2024. All rights reserved.