我正在从事一个涉及在 Java 中使用知识表示的项目,我的印象是某种语义网络是实现它的方法。
Gremlin/Tinkerpop 似乎有非常好的图形生成和遍历语法,但我只能让它在独立的 shell 中工作。它是一种 JVM 语言,所以大概它有某种 Java API?我尝试将源文件夹添加到 Eclipse 项目中,但它充满了错误并且拒绝工作。
有更好的方法吗?也许是一个编译库,类似于我用来处理用户输入的斯坦福 CoreNLP 库?
我目前正在使用 TinkerPop 3.1.0 Console Incubating,每次都有一个选项
Display stack trace? [yN]
我无法输入“y”或“N”来显示或不显示堆栈跟踪。它只是换一个新行,让您没有机会输入 yN 答案。这意味着我无法对我的 gremlin 脚本、命令等进行任何调试。
您可以在下图中看到一个示例:Gremlin Console Stack Trace Message
我在运行 TinkerPop 3.1.0 Console Incubating 的两台独立机器上遇到了这个问题,并且我之前测试的 gremlin-2.6.0 Console 版本没有遇到同样的问题。
其他人遇到过这个问题吗?有没有快速修复的可能?或者我是否需要等待新版本并查看是否可以解决问题?
提前致谢。- 男
我有一个带有几个索引的图表.它们是两个具有标签限制的综合指数.(两者在不同的属性/标签上完全相同).一个肯定似乎工作,但另一个没有.我已完成以下配置文件()以加倍检查:
一个叫做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) 在 Tinkerpop3 valueMap 返回一个数组时,如何获得真正的键值对(没有数组)?
gremlin> Gremlin.version()
==>3.0.1-incubating
:> def trav = g.V().hasLabel('Group'); trav.valueMap()
==>{joinTime=[2016-12-05T22:27:01.088Z], groupId=[9de5-45cf-b40d-e357b40e87b1], mCanInvite=[true]}
:> def trav = g.V().hasLabel('Group'); trav.local(properties().group().by(key()).by(value()))
==>{joinTime={2016-12-05T22:27:01.088Z=1}, groupId={9de5-45cf-b40d-e357b40e87b1=1}, mCanInvite={true=1}
Run Code Online (Sandbox Code Playgroud) 我们有顶点来存储各种作业及其类型,并算作属性。我必须按状态和数量进行分组。我尝试了以下查询,该查询适用于一个属性(receiveCount)
g.V().hasLabel("Jobs").has("Type",within("A","B","C")).group().by("Type").by(fold().match(__.as("p").unfold().values("receiveCount").sum().as("totalRec")).select("totalRec")).next()
Run Code Online (Sandbox Code Playgroud)
我想提供 10 个以上的属性,例如 successCount、FailedCount 等。有没有更好的方法来提供呢?
摘要
我正在开发一个能够跨越tinkerpop支持的多个图形数据库的应用程序
细节
根据我的研究,相同版本的tinkerpop库(gremlin-python)不能与所有图形数据库的最新版本一起使用.这种情况的最佳方法是什么?我打算测试的数据库是
我仍在尝试集成更多数据库,如orientDB和Amazon Neptune,你知道他们将支持哪个版本.
我被过滤多个属性和提取的节点,因此,如果有多个filter接合用and和or。2 工作正常,但从 3 开始它似乎崩溃了。
下面是错误的简化演示。
和 filter
gremlin> g.V().filter(has("name", "marko"))
==>v[1]
gremlin> g.V().filter(has("name", "marko")).and().filter(has("name", "marko"))
==>v[1]
gremlin> g.V().filter(has("name", "marko")).and().filter(has("name", "marko")).and().filter(has("name", "marko"))
java.util.ConcurrentModificationException
Type ':help' or ':h' for help.
Display stack trace? [yN]
Run Code Online (Sandbox Code Playgroud)
没有 filter
gremlin> g.V().has("name", "marko")
==>v[1]
gremlin> g.V().has("name", "marko").and().has("name", "marko")
==>v[1]
gremlin> g.V().has("name", "marko").and().has("name", "marko").and().has("name", "marko")
java.util.ConcurrentModificationException
Type ':help' or ':h' for help.
Display stack trace? [yN]
Run Code Online (Sandbox Code Playgroud)
dummy-name是不存在的东西。仍然因不同的错误而崩溃
gremlin> g.V().hasLabel("dummy-name").filter(has("name", "a").or().has("name", "b").or().has("name", "c"))
java.lang.ArrayIndexOutOfBoundsException
Type ':help' or ':h' for help. …Run Code Online (Sandbox Code Playgroud) 大多数数据库为用户提供了列出正在运行的查询的机制,并在需要时取消它们 这对于终止花费大量时间的查询特别有用.例如,在MySQL中你会做这样的事情:
mysql>show processlist;
mysql> kill <pid>;
Run Code Online (Sandbox Code Playgroud)
我怎样才能在gremlin服务器上做类似的事情?到目前为止,唯一可用的旋钮是scriptEvaluationTimeoutyaml配置,它允许您在超时时终止请求.我对能够列出所有正在运行的查询的API以及可以让我按ID删除查询的API感兴趣.如果不支持,tinkerpop是否有计划在较新版本中支持它?就像是:
g.query()
g.query('123')
g.query('123').cancel()
Run Code Online (Sandbox Code Playgroud) 我有 Gremlin 和 Amazon Neptune 的后端服务。我想提供一个 GraphQL 端点来在 Neptune 中执行查询。我发现了一个可能有效的旧黑客马拉松项目。但是,我想知道是否有更好的方法来实现它。
获取具有相同属性键的值的最佳方法是什么?
编辑:很抱歉更改问题,我的要求是从任一部门获得一名员工
我需要获取为IT或销售部门工作的所有员工,并由ID为123的经理进行管理.
我用过
g.V().has('managerId',123).out('manages').as('employee')
.out('worksFor').has('departmentName','IT','Sales')
.select('employee')
Run Code Online (Sandbox Code Playgroud)
其中out('worksAt')给人部门.
我们可以在一个has()步骤中执行此操作,还是应该使用union()步骤
g.V().has('managerId',123).out('manages').as('employee').out('worksFor')
.union(__.has('departmentName','IT'),__.has('departmentName','Sales')
.select('employee')
Run Code Online (Sandbox Code Playgroud) tinkerpop3 ×10
gremlin ×9
tinkerpop ×6
graph ×1
graphql ×1
janusgraph ×1
java ×1
neo4j ×1
stack-trace ×1
titan ×1