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

How to fire match query in gremlin . Filter query not working in cosmos db with java driver

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

1) 当 outE()(如下面的 gremlin 查询中描述的)具有包含打印的标签时,在以下查询中返回顶点 'a'。

g.V().hasLabel('url').has('name','sw10707').as('a').outE('print').has('forward','states').inV().select('a')

2) 返回所有边标签中包含 print 的顶点:

g.V().hasLabel('url').has('name','sw10707').as('a').outE('print').has('forward','states').inV()

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

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

这次遍历:

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 不支持 lambda,因此您的遍历将失败。目前,我所知道的解决方法是返回边缘以在客户端上过滤它们,然后使用它们开始第二次遍历……不是很好。希望你提出的问题能很快带来一些缓解。

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