如何在没有索引值的情况下遍历?
How to traverse without indexed value?
我有一个场景,我想查询获取所有没有特定 属性 键和 value.So 的顶点,我试过的是
g.V().hasLabel('Persona').hasNot('isTempDob').count()
导致
Could not find a suitable index to answer graph query and graph scans are disabled: [(~label = Persona)]:VERTEX
所以我尝试了更简单的方法,方法是按照文档获取标签名称为 Persona 的顶点数。查询是
g.V('Persona').count()
导致
0
我不知道为什么没有任何索引值我无法遍历?任何帮助都会提前 appreciated.Thanks。
可能只是输入错误,但 g.V('Persona').count()
不会搜索标签 - 它会查找具有唯一标识符 "Persona" 的顶点。结果我怀疑“0”的答案是正确的。
I don't know why I am not able to traverse without any indexed value?
JanusGraph(和其他图形系统)防止没有索引值的遍历作为护栏,以防止用户意外执行长 运行 查询。如果你有一个只有数千个顶点的小图,那么你可能会觉得这个特性很烦人,但是当你有数十亿个顶点时,它可能是一个很好的帮助,因为你在那里写的查询会花费数小时和数小时完成并且不会是获得该答案的推荐方法。如果您正在对图中的所有顶点进行全局扫描,那么您应该在 Spark 上执行 Gremlin 以享受它的并行处理能力,将这些小时和小时变成分钟。
回到小图的情况,您可以通过使用 query.force-index=false
配置 JanusGraph 来暂时禁用护栏以允许执行查询。那应该允许您的查询在没有 error/warning.
的情况下工作
测试过
标识符是每个顶点的唯一 ID。创建顶点时,您可以指定一个 ID 或自动生成一个 ID。例如,
gremlin> saturn = g.addV("character").property(T.id, 1).property('name', 'saturn').property('age', 10000).property('type', 'titan').next();
==>v[1]
如果您以上述方式创建顶点,您将获得 v[1]
作为您指定的 ID。
下面没有指定ID,gremlin会为你生成一个:
gremlin> g.addV("character").property('name', 'prometheus').property('age', 1000).property('type', 'god').next()
==>v[0]
假设它是第一个顶点,那么它的ID将为0。
在您的场景中,如果您查询的所有顶点都具有相同的标签并排除指定的名称,您可以试试这个(我使用的是 JanusGraph 玩具图 gods):
gremlin> g.V().has('character','name',neq('hercules')).valueMap();
==>[name:[prometheus],type:[god],age:[1000]]
==>[name:[saturn],type:[titan],age:[10000]]
==>[name:[jupiter],type:[god],age:[5000]]
==>[name:[neptune],type:[god],age:[4500]]
==>[name:[alcmene],type:[human],age:[45]]
==>[name:[pluto],type:[god],age:[4000]]
==>[name:[nemean],type:[monster],age:[20]]
==>[name:[hydra],type:[monster],age:[0]]
==>[name:[cerberus],type:[monster],age:[0]]
以上查询找到所有标记为 character 的顶点并排除名称 hercules。或者您可以使用以下查询来做同样的事情。
gremlin> g.V().hasLabel('character').has('name',neq('hercules')).valueMap();
您的查询无效的原因是 hasNot(key)
必须与键而不是值一起使用。
如果有帮助请告诉我。
我有一个场景,我想查询获取所有没有特定 属性 键和 value.So 的顶点,我试过的是
g.V().hasLabel('Persona').hasNot('isTempDob').count()
导致
Could not find a suitable index to answer graph query and graph scans are disabled: [(~label = Persona)]:VERTEX
所以我尝试了更简单的方法,方法是按照文档获取标签名称为 Persona 的顶点数。查询是
g.V('Persona').count()
导致
0
我不知道为什么没有任何索引值我无法遍历?任何帮助都会提前 appreciated.Thanks。
可能只是输入错误,但 g.V('Persona').count()
不会搜索标签 - 它会查找具有唯一标识符 "Persona" 的顶点。结果我怀疑“0”的答案是正确的。
I don't know why I am not able to traverse without any indexed value?
JanusGraph(和其他图形系统)防止没有索引值的遍历作为护栏,以防止用户意外执行长 运行 查询。如果你有一个只有数千个顶点的小图,那么你可能会觉得这个特性很烦人,但是当你有数十亿个顶点时,它可能是一个很好的帮助,因为你在那里写的查询会花费数小时和数小时完成并且不会是获得该答案的推荐方法。如果您正在对图中的所有顶点进行全局扫描,那么您应该在 Spark 上执行 Gremlin 以享受它的并行处理能力,将这些小时和小时变成分钟。
回到小图的情况,您可以通过使用 query.force-index=false
配置 JanusGraph 来暂时禁用护栏以允许执行查询。那应该允许您的查询在没有 error/warning.
标识符是每个顶点的唯一 ID。创建顶点时,您可以指定一个 ID 或自动生成一个 ID。例如,
gremlin> saturn = g.addV("character").property(T.id, 1).property('name', 'saturn').property('age', 10000).property('type', 'titan').next();
==>v[1]
如果您以上述方式创建顶点,您将获得 v[1]
作为您指定的 ID。
下面没有指定ID,gremlin会为你生成一个:
gremlin> g.addV("character").property('name', 'prometheus').property('age', 1000).property('type', 'god').next()
==>v[0]
假设它是第一个顶点,那么它的ID将为0。 在您的场景中,如果您查询的所有顶点都具有相同的标签并排除指定的名称,您可以试试这个(我使用的是 JanusGraph 玩具图 gods):
gremlin> g.V().has('character','name',neq('hercules')).valueMap();
==>[name:[prometheus],type:[god],age:[1000]]
==>[name:[saturn],type:[titan],age:[10000]]
==>[name:[jupiter],type:[god],age:[5000]]
==>[name:[neptune],type:[god],age:[4500]]
==>[name:[alcmene],type:[human],age:[45]]
==>[name:[pluto],type:[god],age:[4000]]
==>[name:[nemean],type:[monster],age:[20]]
==>[name:[hydra],type:[monster],age:[0]]
==>[name:[cerberus],type:[monster],age:[0]]
以上查询找到所有标记为 character 的顶点并排除名称 hercules。或者您可以使用以下查询来做同样的事情。
gremlin> g.V().hasLabel('character').has('name',neq('hercules')).valueMap();
您的查询无效的原因是 hasNot(key)
必须与键而不是值一起使用。
如果有帮助请告诉我。