- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力编写一个快速查询,该查询使用 and
步骤使用多个谓词在亚马逊海王星。基本图结构如下,用于对生物数据建模。设置是有“途径”连接到“ enzyme ”,“ enzyme ”连接到“ react ”,“ react ”连接到“化合物”。我正在尝试过滤路径,以便仅返回连接到多个化合物的路径,例如找到与化合物 1 和化合物 2 相关的通路。
g.addV('pathway').property('name', 'pathway 1').as('p1').
addV('pathway').property('name', 'pathway 2').as('p2').
addV('pathway').property('name', 'pathway 3').as('p3').
addV('enzyme').property('name', 'enzyme 1').as('e1').
addV('enzyme').property('name', 'enzyme 2').as('e2').
addV('enzyme').property('name', 'enzyme 3').as('e3').
addV('reaction').property('name', 'reaction 1').as('r1').
addV('reaction').property('name', 'reaction 2').as('r2').
addV('reaction').property('name', 'reaction 3').as('r3').
addV('compound').property('name', 'compound 1').as('c1').
addV('compound').property('name', 'compound 2').as('c2').
addV('compound').property('name', 'compound 3').as('c3').
addV('compound').property('name', 'compound 4').as('c4').
addV('compound').property('name', 'compound 5').as('c5').
addV('compound').property('name', 'compound 6').as('c6').
addE('contains').from('p1').to('e1').
addE('contains').from('p1').to('e2').
addE('contains').from('p1').to('e3').
addE('contains').from('p2').to('e1').
addE('contains').from('p3').to('e2').
addE('partof').from('e1').to('p1').
addE('partof').from('e2').to('e1').
addE('partof').from('e3').to('p1').
addE('partof').from('e1').to('p2').
addE('partof').from('e2').to('p3').
addE('catalyzes').from('e1').to('r1').
addE('catalyzes').from('e2').to('r2').
addE('catalyzes').from('e3').to('r3').
addE('substrate').from('c1').to('r1').
addE('product').from('r1').to('c2').
addE('substrate').from('c3').to('r2').
addE('product').from('r2').to('c4').
addE('substrate').from('c5').to('r3').
addE('product').from('r3').to('c6')
我目前的解决方案是从路径节点开始,并使用 where
和 and
步骤的组合来进行过滤:
g.V().hasLabel('pathway').where(and(
out('contains').hasLabel('enzyme').
out('catalyzes').hasLabel('reaction').both().has('compound', 'name', 'compound 6'),
out('contains').hasLabel('enzyme').
out('catalyzes').hasLabel('reaction').both().has('compound', 'name', 'compound 4')
)
).valueMap().toList()
这工作正常,允许我搜索任意数量的化合物,但速度很慢,需要几秒钟才能运行查询。
相比之下,如果我从复合节点开始并遍历路径,它几乎是瞬时的,但我不知道如何复制上面的多个谓词:
g.V().has('compound', 'name', 'compound 6').both().
in('catalyzes').out('partof').hasLabel('pathway').dedup().valueMap().toList()
对于这个玩具数据集,两个查询都很快,但在我的生产数据库中,有 1000 个通路、6000 个 enzyme 、10000 个 react 和 50000 个化合物,查询可能需要 3-5 秒才能运行。
在 amazon neptune 中是否有替代 where
-and
模式的替代方案,我正在使用它进行基于多个谓词的过滤,这可能会获得更好的性能?
最佳答案
由于和
步骤内部的匿名遍历基本相同。您可以将其替换为 within
并计算不同的值:
g.V().hasLabel('pathway').where(
out('contains').hasLabel('enzyme').
out('catalyzes').hasLabel('reaction').
both().has('compound', 'name', within('compound 6', 'compound 4'))
.values('name').dedup().count().is(2)
).valueMap()
示例:https://gremlify.com/c78cabauv7q
如果你从“复合”顶点开始获得更好的性能,你可以尝试这样的事情:
g.V().
has('compound', 'name', within('compound 6', 'compound 4')).as('compound').
both().in('catalyzes').in('contains').hasLabel('pathway').
group().
by().
by(select('compound').values('name').dedup().count()).
unfold().
where(select(values).is(2)).select(keys).
valueMap()
关于gremlin - 在 gremlin 查询中组合 where & 和 steps 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62786034/
我想连接到我的 gremlin 服务器,我在其中提供了具有同一主机的 gremlin-server.yaml 和 remote.yaml。我的 gremlin 在 Linux 服务器上。在发出 :re
我正在使用 Gremlin-Java 和远程模式与 JanusGraph 进行交互。我现在在边缘定义一个新属性,以便在使用特定策略时过滤它们。以下是我尝试在应用程序中运行的代码,但该策略似乎被完全忽略
使用 gremlin-javascript ,我使用以下方法连接到远程服务器: const gremlin = require('gremlin') const Graph = gremlin.str
如何使用 AWS Neptune GDB 在 gremlin 控制台中将字符串值转换为整数类型。我有字符串值的属性“age”,需要将其转换为 Integer 类型以用于查询中的数学运算。感谢所有建议。
我正在尝试比较我在 gremlin-console 中查询的响应时间(图形数据库是 janusgraph,后端数据库是 hbase)。为此,有一个“clock()”步骤,它可以多次运行查询并返回平均响
我是 Gremlin 的新手,我需要帮助来设置最佳查询以选择唯一和过滤的结果。 从一个 team 开始,我会得到每个 的 player (注意:每个玩家可以为多个团队效力)由 is_friends_w
我有一组具有相同属性“TYPE”的顶点。 如何为所有给定的顶点集更新此属性。 最佳答案 您可以遍历所有顶点并使用 sideEffect 更新它们的 type 属性。例如: g.V.sideEffect
我是 Gremlin 的新手,只是想建立一个基本的图表。我已经能够在新顶点上做一个基本的 addEdge,即 gremlin> v1 = g.addVertex() ==>v[200004] grem
假设我想从我的数据库中获取一些顶点: g.V(1, 2, 3) 然后我有另一组顶点: g.V(4, 5, 6) 想象一下,这不仅仅是 g.V() ,但是一些更复杂的遍历来获取我的顶点。但是遍历必须从V
当我查询路径时,例如: g.V(1).inE().outV().inE().outV().inE().outV().path() path()中既有顶点也有边,请问有没有办法只计算路径中的顶点数而忽略
在 Neptune 工作台上使用 python gremlin,我有两个功能: 第一个添加一个带有一组属性的Vertex,并返回遍历操作的引用 第二个增加了遍历操作。 出于某种原因,第一个函数的操作被
我想创建一个显示连接和连接强度的边缘列表。此示例图包含 4 个人以及他们参加研讨会 A 和 B 的信息,包括他们参加的天数和他们停留的小时数。我想通过研讨会节点建立联系,如果他们在同一天参加同一个研讨
我在 gremlify 上描述了这里的图表.所以我有四种类型的顶点:内容、用户、组和视频。 Content 和 Group 作为容器,User 和 Video 是叶子。此外,我在组和用户、组和内容、组
Gremlin 查询通常使用或生成列表。有时希望能够反转列表。目前 Gremlin 没有 reverse步骤,因此您不能执行以下操作: g.inject(['A','B','C','D']).reve
我有一个简单的图,其中 parent 和 child 是顶点。 parent 与他们的 child 有“isParentOf”关系。所有顶点都有一个属性:“familyName”。 我想使用 grem
我有这样的结构: 组 -> 字段 -> 值 和命令 g.V().hasLabel('groups').out('fields').out('values') 如何按字段和“组”顶点对这些值进行分组?
我很难在 gremlin 中找出以下场景的查询。这是有向图(可能是循环的)。 我想获得前 N 个有利节点,从节点“Jane”开始,这里的优先级定义为: favor(Jane->Lisa) = edge
这是一个非常简单的查询: g.V('customerId').out().path() 这个的 JSON 输出是 { "requestId":"96b26c1d-d032-2004-d36e-
有没有一种方法可以使用 Gremlin 查询仅返回图节点所有属性的子集? 我知道您可以使用转换管道连接属性值,但我更感兴趣的是获得结构化结果(例如 propertyName1 = value1、pro
我将 AWS Neptune Gremlin 与 gremlin_python 一起使用. 我在属性(property)中的日期按要求存储为日期时间 Neptune specs . 我使用 Pytho
我是一名优秀的程序员,十分优秀!