使用Gremlin-Tinkerpop3获取具有所有属性的顶点标签的贴图

使用Gremlin-Tinkerpop3获取具有所有属性的顶点标签的贴图,gremlin,tinkerpop3,Gremlin,Tinkerpop3,我正试图返回类似的东西 { "label1" : ["prop1","prop2"], "label2" : ["prop3","prop4"], "label2" : ["prop1","prop3"] } etc,其中标签[N]是顶点标签值,而道具数组是这些顶点的属性 我可以得到标签列表和属性列表,但我不能将它们组合在一个对象中。我可能会执行这两个查询并最终合并这两个数组,但类似于 g.V().valueMap().select(keys).dedup(); 只在有属性的地方

我正试图返回类似的东西

{
  "label1" : ["prop1","prop2"],
  "label2" : ["prop3","prop4"],
  "label2" : ["prop1","prop3"]
}
etc,其中标签[N]是顶点标签值,而道具数组是这些顶点的属性

我可以得到标签列表和属性列表,但我不能将它们组合在一个对象中。我可能会执行这两个查询并最终合并这两个数组,但类似于

g.V().valueMap().select(keys).dedup();
只在有属性的地方获取属性,因此,如果顶点类型没有任何属性,则该类型返回的数组的大小与实际大小不同

g.V().label().dedup();
这是使用gremlin语法(TP3)
谢谢

我假设您正在尝试获取某种模式定义。请注意,这将是一个相当昂贵的遍历,因为您必须迭代所有顶点才能执行此操作:

gremlin> g.V().
......1>   group().
......2>     by(label).
......3>     by(properties().
......4>        label().
......5>        dedup().
......6>        fold())
==>[software:[name,lang],person:[name,age]]

非常感谢。是的,看起来确实很昂贵,但只有在我启动API并缓存它之后才会运行一次。我可以用索引做任何建议的优化吗?在这种情况下,索引没有帮助。无论你做什么,你都无法在不迭代整个图的情况下收集整个模式,所以你被卡住了。我认为这种遍历可以在OLAP中工作,所以如果您的图很大,您可以通过spark执行它。您没有说您使用的是什么图形数据库,但是您可以检查它的API是否能够更直接地访问模式的元素,这样您就不必迭代整个图形来获得它。我使用的是带有HBase存储后端lucene索引(用于PoC)的Janusgraph。我很可能在生产中用Solr替换后者。谢谢