执行以下遍历时:
graph.addVertex("a")
graph.addVertex("b")
graph.addVertex("c")
graph.traversal().V().range(0,2)
graph.traversal().V().range(2,3)
Run Code Online (Sandbox Code Playgroud)
在使用范围功能时,是什么决定了我获得这些顶点的顺序?我保证得到所有三个顶点a,b和c吗?
非常基本的问题,
我刚刚将我的Titan从0.54升级到Titan 1.0 Hadoop 1/TP3 3.01版本.
我遇到删除值的问题
Property key: Cardinality.LIST/SET
Run Code Online (Sandbox Code Playgroud)
也许这是由于升级过程或仅仅是我的TP3误解.
// ----- CODE ------:
tg = TitanFactory.open(c);
TitanManagement mg = tg.openManagement();
//create KEY (Cardinality.LIST) and commit changes
tm.makePropertyKey("myList").dataType(String.class).cardinality( Cardinality.LIST).make();
mg.commit();
//add vertex with multi properties
Vertex v = tg.addVertex();
v.property("myList", "role1");
v.property("myList", "role2");
v.property("myList", "role3");
v.property("myList", "role4");
v.property("myList", "role4");
Run Code Online (Sandbox Code Playgroud)
现在,我想删除所有值"role1,role2 ...."
// iterate over all values and try to remove the values
List<String> values = IteratorUtils.toList(v.values("myList"));
for (String val : values) {
v.property("myList", val).remove();
}
tg.tx().commit();
Run Code Online (Sandbox Code Playgroud)
// …
我从orientdb控制台创建了一个数据库:
create database plocal:/C:/Development/orientdb/databases/testdb root root plocal graph
Run Code Online (Sandbox Code Playgroud)
我启动了服务器以确保我的数据库已成功创建.我打开了网络界面:
localhost:2480
Run Code Online (Sandbox Code Playgroud)
我使用root
as user和root
password 登录testdb .一切都很好.但是,当我现在想要从Java代码连接到我的数据库时:
OrientGraph graph = null;
try {
graph = new OrientGraph("plocal:C:/Development/orientdb/databases/testdb", "root", "root");
System.out.println("success");
} catch(OException e) {
System.out.println("no success - " + e.getMessage());
e.printStackTrace();
} finally {
if(graph != null) {
graph.shutdown();
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
Exception in thread "main" com.orientechnologies.orient.core.exception.OSecurityAccessException: User or password not valid for database: 'testdb'
at com.orientechnologies.orient.core.metadata.security.OSecurityShared.authenticate(OSecurityShared.java:150)
at com.orientechnologies.orient.core.metadata.security.OSecurityProxy.authenticate(OSecurityProxy.java:83)
at com.orientechnologies.orient.core.db.record.ODatabaseRecordAbstract.open(ODatabaseRecordAbstract.java:128)
at com.orientechnologies.orient.core.db.ODatabaseWrapperAbstract.open(ODatabaseWrapperAbstract.java:49)
at com.orientechnologies.orient.core.db.graph.OGraphDatabase.open(OGraphDatabase.java:92)
at de.hof.iisys.relationExtraction.freebase.tinkerpop.DAO.openGraph(DAO.java:30)
at de.hof.iisys.relationExtraction.freebase.main.Main.main(Main.java:44) …
Run Code Online (Sandbox Code Playgroud) 到目前为止,我想删除现有索引并按照文档中的步骤进行操作。我现在没有配置单独的索引后端。但是,当我到达必须等待索引状态更改的步骤时,m.awaitGraphIndexStatus
它会永远等待更改并超时并出现以下错误:
GraphIndexStatusReport[success=false, indexName='usernameComposite', targetStatus=DISABLED, notConverged={username=INSTALLED}, converged={}, elapsed=PT1M0.092S]
Run Code Online (Sandbox Code Playgroud)
当我尝试创建一个新的时,也会发生同样的情况。任何想法可能导致这种情况?
我正在使用以下代码片段创建 indizes:
graph.tx().rollback()
mgmt = graph.openManagement()
name = mgmt.getPropertyKey('username')
mgmt.buildIndex('username-composite', Vertex.class).addKey(name).unique().buildCompositeIndex()
mgmt.commit()
mgmt.awaitGraphIndexStatus(graph, 'username-composite').call()
Run Code Online (Sandbox Code Playgroud) 我有一个带有几个索引的图表.它们是两个具有标签限制的综合指数.(两者在不同的属性/标签上完全相同).一个肯定似乎工作,但另一个没有.我已完成以下配置文件()以加倍检查:
一个叫做KeyOnNode
:属性uid
和标签node
:
gremlin> g.V().hasLabel("node").has("uid", "xxxxxxxx").profile().cap(...)
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TitanGraphStep([~label.eq(node), uid.eq(dammit_... 1 1 2.565 96.84
optimization 1.383
backend-query 1 0.231
SideEffectCapStep([~metrics]) 1 1 0.083 3.16
>TOTAL - - 2.648 -
Run Code Online (Sandbox Code Playgroud)
以上是完全可以接受的,效果很好.我假设魔术线是backend-query
.
另一种叫做NameOnSuperNode
:属性name
和标签supernode
:
gremlin> g.V().hasLabel("supernode").has("name", "xxxxxxxx").profile().cap(...)
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TitanGraphStep([~label.eq(supernode), name.eq(n... 1 1 5763.163 100.00
optimization 2.261
scan 0.000
SideEffectCapStep([~metrics]) 1 1 0.073 0.00 …
Run Code Online (Sandbox Code Playgroud) 我的图中有树形数据结构,如下图所示。每种颜色代表具有不同标签的节点,其关系如员工 -> 应用程序 -> 项目 -> pv -> 扫描)。
问题#1:
我想找到顶部节点 0 的所有叶节点(绿色的)。
我尝试了下面的循环代码,它返回带有标签员工的所有节点。不仅仅是叶节点。
g.V().has('person', 'id', '0').repeat(__.in('reportsTo')).emit().values('id')
Run Code Online (Sandbox Code Playgroud)
示例图可以在gremlinbin中找到。
如何找到所有绿色叶子节点?
更新#1:
正如评论中提到的,我尝试了树模式。但它不允许我在树上调用 getLeafObjects() 。不确定缺少什么。另外,我再次只能创建员工节点树。如何遍历扫描节点?
> tree = g.V().has('person', 'id', '0').repeat(__.in('reportsTo')).emit().tree()
> tree.getLeafObjects()
No signature of method: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.getLeafObjects() is applicable for argument types: () values: []
Run Code Online (Sandbox Code Playgroud)
问题2:
如何根据 max(id) 检索每个父项下的子项中的子顶点?因此,在我的示例图中,每个黑色顶点可以有一个或多个绿色子顶点。我想找到每个黑色顶点下具有 max(property) 的绿色顶点。
我正在编写一个脚本,使用gremlin-python库在gremlin-server上创建一个图形.我找不到任何关于图书馆的好文档.
这是我正在尝试的代码结构:
from gremlin_python import statics
from gremlin_python.structure.graph import Graph
from gremlin_python.process.graph_traversal import __
from gremlin_python.process.strategies import *
from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
graph = Graph()
g = graph.traversal().withRemote(DriverRemoteConnection('ws://localhost:8182/gremlin','try1'))
# Drop all vertices in the graph to create a new one
g.V().drop().iterate()
a = g.addV('person').property('name', 'Tushar').property('pronoun', 'me')
b = g.addV('person').property('name', 'Avi').property('pronoun','you')
e1 = a.addE('knows').to(b).property('relation','self')
c = g.addV('subject').property('name','maths')
e2 = a.addE('studies').to(c)
e3 = b.addE('studies').to(c)
e3.next()
v = g.V().toList()
e = g.E().toList()
print(v)
print(e)
Run Code Online (Sandbox Code Playgroud)
这段代码只给我2个顶点和1个边.
我的一些尝试:
.next()
,图表上没有提交数据.e1
一个.next() …
大多数数据库为用户提供了列出正在运行的查询的机制,并在需要时取消它们 这对于终止花费大量时间的查询特别有用.例如,在MySQL中你会做这样的事情:
mysql>show processlist;
mysql> kill <pid>;
Run Code Online (Sandbox Code Playgroud)
我怎样才能在gremlin服务器上做类似的事情?到目前为止,唯一可用的旋钮是scriptEvaluationTimeout
yaml配置,它允许您在超时时终止请求.我对能够列出所有正在运行的查询的API以及可以让我按ID删除查询的API感兴趣.如果不支持,tinkerpop是否有计划在较新版本中支持它?就像是:
g.query()
g.query('123')
g.query('123').cancel()
Run Code Online (Sandbox Code Playgroud) 如何在单个 gremlin 查询中向相同顶点类型添加边和删除边。
假设我们有两种类型的顶点类型 A --is--> B 现在我有一个顶点连接到 B 的其他顶点。
我想将 A 的顶点更新为 B 的其他顶点。
目前,我正在删除当前的 B 顶点,然后添加新的顶点。
gremlin datastax-enterprise tinkerpop datastax datastax-enterprise-graph
我位于 Gremlin 控制台并连接到 AWS Neptune 数据库
g.V().hasLabel('Risk').toList()
提供了预期的结果,但是当我尝试将结果分配给变量时
risks = g.V().hasLabel('Risk').toList()
我收到下面的消息 - 令牌识别错误显然会出现在变量名称上,因为当我更改变量名称时,消息的位置和“at”部分会发生变化。
{"requestId":"650d7c4b-44d1-43f8-b9a3-fbf085cc3ead","code":"MalformedQueryException","detailedMessage":"Query parsing failed at line 1, character position at 3, error message : token recognition error at: 'ks'"}
我在 Tinkerpop 数据库上尝试了同样的操作,并且变量分配有效。我缺少什么?
tinkerpop ×10
gremlin ×8
titan ×4
tinkerpop3 ×3
datastax ×1
janusgraph ×1
orientdb ×1
python ×1