问题标签 [gremlinpython]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gremlin - gremlin python 克隆遍历
我正在使用 gremlin-python 连接到 gremlin-server 并且我正在尝试逐步建立一个查询,但我遇到了困难。我的查询有一个初始部分,如下所示:
现在我想用这个查询做很多事情,首先我只想要一个计数:
现在,如果我使用该变量执行任何其他操作,query
则计数步骤将在遍历中,因此以下内容不起作用:
查看文档似乎我需要克隆遍历,所以我将上面的内容替换为:
但是query
仍然有count()
步骤,当我打印字节码时,即使我克隆了它。这是 gremlin-python 的预期行为吗?这是我正在谈论的完整示例,在每个步骤中打印字节码:
我该怎么做才能克隆/复制遍历的开始,以便我可以在 gremlin-python 中重用它?
gremlin - 在 Gremlin 查询中使用通配符
我有两个疑问:
和
并且根据我是否获得kind
价值来调用每一个,因此该方法如下所示:
我想知道是否可以使用通配符将 if 统一为单个查询,类似于以下代码
python - Gremlin Python - “服务器已断开 - 请尝试重新连接”错误
我有一个 Flask Web 应用程序,我想在其中保持与 AWS Neptune 图形数据库的持久连接。该连接建立如下:
我面临的问题是,如果闲置,连接会自动断开,并且我找不到检测连接是否断开的方法(以便我可以使用上面的代码片段重新连接)。
我见过类似的问题:Gremlin server withRemote connection closed - how to reconnect automatic? 但是这个问题也没有解决方案。这个类似的问题也没有答案。
我尝试了以下两种解决方案(均无效):
- 我在四个 Gunicorn 工作人员后面设置了我的 web 应用程序,超时时间为 100 秒,希望工作人员重新启动能够处理 Gremlin 超时。
- 我尝试捕获异常以检测连接是否断开。每次我
self.g
在我的图表上进行一些遍历时,我都会尝试“刷新”连接,我的意思是:
这里self.conn
被初始化为:
有没有办法解决这个连接错误?
谢谢
更新:添加了以下错误消息:
gremlin - Gremlin - 在节点和边属性上查找具有多个布尔条件的连接节点
我想找到应该链接到给定节点的节点,其中链接由一些逻辑定义,该逻辑使用节点和现有边的属性,逻辑如下:
A)(该对具有相同的 zip(节点属性)和 name_similarity(边缘属性)> 0.3 或
B) 该对具有不同的 zip 并且 name_similarity > 0.5 或
C)该对具有边缘类型“external_info”,值为“connect”)
D)AND(该对没有带有“external info”的边缘类型,值为“disconnect”)
简而言之:(A | B | C) & (~D)
我仍然是 gremlin 的新手,所以我不确定如何在边和节点上组合多个条件。
以下是创建图表的代码,以及该图表的预期结果:
输入节点 A 的预期输出是节点 B(由于条件 A)、D(由于条件 B)和 F(由于条件 C)。由于条件 D,节点 E 不应链接。
我正在寻找将检索这些结果的 Gremlin 查询。
recursion - Gremlin 查询以查找特定节点以任何方式连接到的整个子图
我是 Gremlin 的新手,我正在使用gremlin-python
它来遍历我的图表。该图由许多集群或子图组成,这些集群或子图是内部连接的,并且不与图中的任何其他集群互连。
一个简单的例子是一个有 5 个节点和 3 个边的图:
Customer_1
CreditCard_A
与1_HasCreditCard_A
边缘相连Customer_2
CreditCard_B
与2_HasCreditCard_B
边缘相连Customer_3
CreditCard_A
与3_HasCreditCard_A
边缘相连
我想要一个查询,它将返回所有节点和连接(输入或输出)到查询节点的边的子图对象。然后我可以将这个子图存储为一个变量,然后在它上面运行不同的遍历来计算不同的东西。
此查询需要递归,因为这些集群可能由彼此相距许多(向内或向外)跃点的节点组成。还有许多不同类型的节点和边,它们都必须返回。
例如:
- 如果我
Customer_1
在查询中指定,生成的子图将包含Customer_1
、Customer_3
、CreditCardA
、1_HasCreditCard_A
和3_HasCreditCard_A
。 - 如果我指定
Customer_2
,返回的子图将由Customer_2
,CreditCard_B
,组成2_HasCreditCard_B
。 - 如果我查询
Customer_3
,将返回与查询返回的完全相同的子图对象Customer_1
。
我已经将 Neo4J 与 Cypher 和 Dgraph 与 GraphQL 一起使用,并发现在这两种语言中这项任务非常容易,但在理解 gremlin 方面却更加困难。
编辑:
从,这个问题,选择的答案应该达到我想要的,但没有通过更改.both('created')
为 just来指定边缘类型.both()
。
但是,循环语法:.loop{true}{true}
当然在 Python 中是无效的。此循环功能是否可用gremlin-python
?我找不到任何东西。
编辑2:
我已经尝试过了,我认为它似乎按预期工作。
这是我正在寻找的有效解决方案吗?是否也可以在此结果中包含查询的节点?
graph - 从节点获取图中的所有路径,但只有终止的路径
我编写了以下查询,它返回来自指定节点的所有可能路径。
如果我们在这个结构中有一个包含 3 个节点的简单图:
此查询将返回两条路径:
但是,我只想返回所有终止的路径(即没有更多的节点要遍历),在这个例子中只会返回
这可能吗?
graph - 如何将顶点属性与指向它的边缘的边缘权重相乘?
我被困在我似乎遇到的图形遍历问题上。我使用 gremlinpython,我的数据库存储在 AWS Neptune 中。
该图类似于此示例:
现在我想通过将配方值乘以它们各自的边缘量并将它们相加来计算订单的总成本。
到目前为止,我的代码如下所示:
我注意到这段代码只会将每个配方值乘以第一个边的数量,而不是各自的数量。我不确定如何在 sack().by() 操作中指定每个顶点应乘以各自的边量。
gremlin - Neptune - 如何使用比例权重获得到所有节点的距离 gremlin
对于以下场景,我很难在 gremlin 中找出查询。这是有向图(可能是循环的)。
我想从节点“Jane”开始获得前 N 个有利节点,其中青睐定义为:
这是手动计算我的意思的相同图表,
这很容易通过编程进行传输,但我不确定如何使用 gremlin 甚至 sparql 来查询它。
这是创建此示例图的查询:
我正在寻找的是:
我正在努力配合循环图来调整重量。这是我到目前为止能够查询的地方:https ://gremlify.com/f2r0zy03oxc/2
解决斯蒂芬·马莱特的评论:
计算示例
这是一些psedocode:
gremlin - Gremlin-python:如何编写在 where 条件下使用两个连接顶点的属性的查询?
我是 Gremlin 的新手,正在尝试将 SQL 查询转换为 Gremlin。我有两种顶点类型,标记为host
和repo
,这是用于创建顶点和边的 Gremlin 脚本:
我想在 Gremlin 中写下一个与下面的 SQL 查询执行相同操作的查询:
到目前为止,我已经尝试了以下代码python
:
但我不知道如何将映射的reporepo.assetAge
顶点传递给. 非常感谢任何帮助。谢谢。days
timedelta()
python - 是否可以将 fastapi 与 gremlin-python 一起使用?
我正在尝试将 fastapi 与gremlin-python一起使用。该库使用 tornado 作为连接到 gremlin 服务器的传输,特别是它使用 httpclient 和 websockets 以及 tornado 的ioloop。
问题是 python 禁止嵌套事件循环并且我得到运行时错误:https ://pastebin.com/mcFhuKks 目前作为解决方法我使用nest_asyncio,但这是一个非常不可靠的解决方案。
由于之前我在这里看到了几个关于 asyncio 循环的问题(尽管主要是关于 aiohttp),我很好奇是否有一些简单的方法可以解决这个问题(例如,以某种方式重用父事件循环)。
另外我想注意到 gremlin-python DB 连接构造函数支持传递自定义传输工厂(而不是default),我尝试使用类似asyncio.get_event_loop()
andasyncio.run_until_complete()
而不是 tornado 的替代品,但没有运气。
因此,我在这里寻求任何想法或可能的解决方案。
- FastAPI 版本:==0.61.1
- Python版本:python:3.8-slim