如何在 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。
我有 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。