首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连通图中Gremlin中无链接顶点的匹配方法

连通图中Gremlin中无链接顶点的匹配方法
EN

Stack Overflow用户
提问于 2019-04-03 17:51:37
回答 1查看 37关注 0票数 0

我有一个简单的图,人员节点(假设超过10K的人员节点)和规则节点(大约有几个规则)还没有链接,这两种类型的节点之间没有边。我想做的是通过匹配Gremlin中的属性值来在它们之间创建边。

people节点有四个属性:名称、年龄、状态、注册。规则节点有三个属性:年龄、状态、注册。不同的规则节点具有不同的属性值,如(registered=true,state=WA,年龄> 22)等。

如何编写一个gremlin,它可以将具有匹配属性值的所有人员节点与每个规则节点链接起来?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-03 18:19:10

给定注释中的附加信息,示例图可以如下所示:

代码语言:javascript
复制
g = TinkerGraph.open().traversal()
g.addV('person').
    property('name','daniel').
    property('age',37).
    property('state','AZ').
  addV('person').
    property('name','howell').
    property('age',25).
    property('state','WA').
  addV('person').
    property('name','john').
    property('age',19).
    property('state','NV').
  addV('rule').
    property('state','WA').
    property('state','CA').
    property('state','OR').
    property('minimumAge',22).
  addV('rule').
    property('state','AZ').
    property('state','FL').
    property('state','TX').
    property('minimumAge',19).
  iterate()

我不太确定age > 22是否是有意的,但是让我们假设您实际上只是在寻找相等的匹配;那么您的查询是:

代码语言:javascript
复制
g.V().hasLabel('people').as('person').
  V().hasLabel('rule').
    where(eq('person')).
      by(values('age','state','registered').fold()).
  addE('hasRule').
    from('person')

要匹配personrule顶点,您可以执行类似的操作(根据需要添加更多规则):

代码语言:javascript
复制
g.V().hasLabel('person').as('person').
  V().hasLabel('rule').
    where(lte('person')).by('minimumAge').by('age').
    filter(values('state').where(eq('person')).by().by('state')).
  addE('hasRule').
    from('person').iterate()

这个查询将在样例图中添加两个边( john没有规则,因为他太年轻了):

代码语言:javascript
复制
gremlin> g.V().outE().inV().path().by('name').by(label).by(valueMap())
==>[daniel,hasRule,[minimumAge:[19],state:[AZ,FL,TX]]]
==>[howell,hasRule,[minimumAge:[22],state:[WA,CA,OR]]]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55501338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档