Acl 检索不同的标记顶点和/或顶点之间的属性
下面是我的图表Acl 检索不同的标记顶点和/或顶点之间的属性,acl,graph-databases,gremlin,janusgraph,Acl,Graph Databases,Gremlin,Janusgraph,下面是我的图表 g.addV('user').property('userId','user1').as('u1'). addV('user').property('userId','user2').as('u2'). addV('user').property('userId','user3').as('u3'). addV('group').property('groupId','group1').as('g1'). addV('group'
g.addV('user').property('userId','user1').as('u1').
addV('user').property('userId','user2').as('u2').
addV('user').property('userId','user3').as('u3').
addV('group').property('groupId','group1').as('g1').
addV('group').property('groupId','group2').as('g2').
addV('group').property('groupId','group3').as('g3').
addV('folder').property('folderId','folder1').property('folderName','level1_1').property('description','level1_desc1').as('f1').
addV('folder').property('folderId','folder2').property('folderName','level2_2').property('description','level2_desc2').as('f2').
addV('folder').property('folderId','folder3').property('folderName','level3_3').property('description','level3_desc3').as('f3').
addV('object').property('objId','obj1').property('objTitle','objtitle1_1').property('description','o1_desc1').as('o1').
addV('object').property('objId','obj2').property('objTitle','objtitle2_2').property('description','o2_desc2').as('o2').
addV('object').property('objId','obj3').property('objTitle','objtitle3_3').property('description','o3_desc3').as('o3').
addE('in_folder').from('o1').to('f2').
addE('in_folder').from('o2').to('f3').
addE('in_folder').from('o1').to('f3').
addE('in_folder').from('f2').to('f1').
addE('in_folder').from('f3').to('f2').
addE('member_of').from('u1').to('g1').
addE('member_of').from('u2').to('g2').
addE('member_of').from('u3').to('g3').
addE('member_of').from('g3').to('g1').
addE('has_permission').from('g1').to('f1').
addE('has_permission').from('g1').to('f1').
addE('has_permission').from('g2').to('f2').
addE('has_permission').from('g3').to('f3').
addE('has_permission').from('u2').to('f1').iterate()
图上的两个问题
1-如何在单个查询中检索用户有权访问的所有文件夹和对象
但是这个查询会生成每个对象及其文件夹顶点,而我的期望是接收像搜索结果一样的文件夹和对象作为搜索结果
2-在层次结构中获取对象顶点的“基于对象顶点”属性或“文件夹顶点”属性,这意味着所有对象都可以基于任何级别的“文件夹顶点”属性访问
我在下面写了一个查询,当文件夹和对象顶点属性值匹配时返回结果
g.V().has('user','userId','user1').emit().until(__.not(outE('member_of'))).repeat(out('member_of')).outE('has_permission').inV().has('folderName',textContains('level1')).inE('in').outV().has('objTitle',textContains('objtitle3')).as('o').select('o').valueMap('objTitle','objId').dedup().range(1,20)
如何在对象和文件夹顶点属性之间执行或操作,以及如何在文件夹和对象顶点的多个属性上执行或操作?1-如何检索用户在单个查询中可以访问的所有文件夹和对象
你能详细谈谈第二个问题吗?例如,用于描述问题的预期结果或图形。根据文件夹顶点的属性值或对象自身属性值检索对象。在我编写的查询中,获取同时匹配folderName属性文本和objTitle属性文本的对象。如何使这个to或子句与文本中的任何一个匹配。该查询显示每个顶点类型的一个字段,但需要使用OR子句实时检查它们之间的多个属性值。我编写的查询应在以下情况下返回结果:当提供了'folderName',textContains'fake'时,静止对象文本与某个dataHi Sel匹配,而上面的查询出现错误。方法:groovysh_evaluate.identify的无签名适用于参数类型:值:[]可能的解决方案:identitygroovy.lang.Closure,notifygraph=JanusGraphFactory.open'conf/gremlin server/janusgraph cql es server.properties'使用janusgraph工厂获取遍历对象。它应该是identify而不是identify。
g.V().has('user','userId','user1').emit().until(__.not(outE('member_of'))).repeat(out('member_of')).outE('has_permission').inV().has('folderName',textContains('level1')).inE('in').outV().has('objTitle',textContains('objtitle3')).as('o').select('o').valueMap('objTitle','objId').dedup().range(1,20)
g.V().has('user','userId','user1').
repeat(out('member_of')).emit().
until(__.not(outE('member_of'))).
out('has_permission').dedup().
union(
// all folders
identity(),
// all sub-folders and objects
__.repeat(__.in('in_folder')).emit().until(__.not(inE('in_folder')))
).dedup()