Graph 如何在连通图中匹配Gremlin中未链接的顶点

Graph 如何在连通图中匹配Gremlin中未链接的顶点,graph,gremlin,Graph,Gremlin,我有一个简单的图,有人节点,比如说超过10K人节点和规则节点,关于一些尚未链接的规则,这两种节点之间不存在边。我想做的是通过匹配Gremlin中的属性值在它们之间创建边 人员节点有四个属性:名称、年龄、状态和注册。 规则节点有三个属性:年龄、状态、已注册。。不同的规则节点将具有不同的属性值,如registed=true、state=WA、age>22等 如何编写一个可以将所有具有匹配属性值的人员节点与每个规则节点链接起来的小精灵?如果注释中包含其他信息,则示例图可能如下所示: g = Tinke

我有一个简单的图,有人节点,比如说超过10K人节点和规则节点,关于一些尚未链接的规则,这两种节点之间不存在边。我想做的是通过匹配Gremlin中的属性值在它们之间创建边

人员节点有四个属性:名称、年龄、状态和注册。 规则节点有三个属性:年龄、状态、已注册。。不同的规则节点将具有不同的属性值,如registed=true、state=WA、age>22等


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

如果注释中包含其他信息,则示例图可能如下所示:

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()
我不太确定年龄>22岁是否是故意的,但让我们假设你实际上只是在寻找平等匹配;那么您的查询将是:

g.V().hasLabel('people').as('person').
  V().hasLabel('rule').
    where(eq('person')).
      by(values('age','state','registered').fold()).
  addE('hasRule').
    from('person')
要匹配person和rule顶点,您可以执行与此类似的操作,根据需要添加更多规则:

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没有规则,因为他太年轻了:

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]]]

谢谢是的,匹配条件需要超越简单的等式,如大于和小于。例如,某些人员节点只能链接到指定年龄小于22岁的规则节点。这些规则节点将进一步链接到产品节点,如酒精或香烟。因此,最终目标是找到适合符合特定规则条件的人的产品。但是规则属性是什么样的呢?它像一个字符串“<22”还是两个独立的属性,比如predicate=lt和age=22?啊,好问题。对于规则上的age属性,它实际上被称为minimumAge,因此任何人的年龄在指定时都需要大于此值。对于州属性,它通常是一个多基数列表,如[WA,CA,OR],因此只有像这些州的人才能符合规则。好的,我将根据这些新信息重写我的答案。谢谢,我想就是这样了。这句话是我所不知道的…用“人”这个词,用“最小值”这个词,用“年龄”这个词。。