我正在为我的项目 Neptune by AWS 使用图形数据库。 Neptune 使用 gremlin 语法进行图形查询。我试图执行一个场景,在这个场景中,我必须根据边上的属性过滤来自顶点的传出边。让我们称该属性为“x”。此属性“x”的值的形式为“abc::xyz::ref”。这是为了在边上存储多个值,因为 Neptune 不允许在边上存储多个值。我必须对三个组合和一个完全匹配项进行包含检查:-
- 'abc::'
- '::abc'
- '::abc::'
- 与“abc”完全匹配
我试图在我的 java 代码中的 gremlin 中使用过滤器命令。下面的代码在内存中的 TinkerGraph 上运行良好,但是当我将它与 Neptune 连接并运行相同的查询时,它会抛出一些解析异常。
String valueToCheck = "abc";
List<String> listOfValuesToCheck = new ArrayList<>();
listOfValuesToCheck.add("::abc");
listOfValuesToCheck.add("abc::");
listOfValuesToCheck.add("::abc::");
GraphTraversal<Vertex, Map<Object, Object>> gt24 = g.V().outE().has("x").filter(it -> {
String value = String.valueOf(it.get().value("x"));
if(value.equals(valueToCheck)){
return true;
}else {
for(String s: listOfValuesToCheck){
if(value.contains(s){
return true;
}
}
}
}).valueMap().with(WithOptions.tokens);
while (gt24.hasNext()) {
System.out.println(gt24.next());
}
有人知道为什么海王星会发生这种情况吗?是否有更好的方法可以与 Neptune 配合使用。
我又看到一个例子,Neptune 没有抛出错误,但也没有返回任何结果,但与 TinkerGraph 的工作相同。
y - 边上的属性
z - 顶点属性
GraphTraversal<Vertex, Map<String, Object>> gt13 = g.V(1, 2).project("id", "summary").by(T.id)
.by(__.outE().has("y", "e").inV().group().by("z"));
最佳答案
Neptune doesn't support lambdas steps.
您应该尝试用其他 gremlin 步骤替换您的 lambda 代码。
g.V().outE().has("x").or(
__.has('prop', 'abc'),
__.has('prop', TextP.containing('abc::')),
__.has('prop', TextP.containing('::abc')),
).valueMap().with(WithOptions.tokens)
关于java - 使用 gremlin 语法时对 Amazon neptune 有任何限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62637015/