java - 编译 gremlin 遍历查询的响应

标签 java gremlin amazon-neptune

我有以下图形结构:

顶点—— Activity 、项目、领导

{"Name":["CompanyV"],"sid":["SidFromSQL"]}
{"name":["Campaign3V"],"status":["paused"]}
{"name":["Campaign1"],"startDate":["Jan 1, 2019 5:30:00 AM"]}
{"name":["Campaign2V"],"status":["active"]}
{"name":["Lead11V"]}
{"name":["Lead2V"]}
{"name":["Project1V"],"Name":[""],"sid":["SidFromSQL"]}
{"name":["Project2V"],"Name":[""],"sid":["SidFromSQL"]}
{"name":["Lead3V"]}
{"name":["Campaign1V"],"status":["active"]}

边缘:

{"inVertex":{"id":"58b6e79f-6809-6fc4-9f0a-c8a26337a729","label":"Campaign"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"a6b6e79f-6809-87bf-a535-eec9101e683c","label":"hasCampaign"}
{"inVertex":{"id":"c4b6e7ae-64d3-b8b9-ce7b-c319e7ed70ca","label":"Lead"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"6cb6e7ae-64d4-6fb0-9314-411eb72d9a28","label":"hasLead"}
{"inVertex":{"id":"a2b6e79d-1ca7-db4e-f19f-2ef1df514ade","label":"Project"},"outVertex":{"id":"64b6e79c-d58b-37ad-6c3e-63a783e6df97","label":"Company"},"id":"4eb6e7a8-451f-4365-1d79-d5d118b5ff56","label":"hasProject"}
{"inVertex":{"id":"c4b6e7ae-64d3-b8b9-ce7b-c319e7ed70ca","label":"Lead"},"outVertex":{"id":"58b6e79f-6809-6fc4-9f0a-c8a26337a729","label":"Campaign"},"id":"96b6e7ae-64d4-b918-353d-fccc13cbd9bb","label":"hasLead"}
{"inVertex":{"id":"94b6e79f-69b9-ccfe-d9e6-a41c4be59979","label":"Campaign"},"outVertex":{"id":"a2b6e79d-1ca7-db4e-f19f-2ef1df514ade","label":"Project"},"id":"34b6e79f-69b9-bd15-9331-0551c464f222","label":"hasCampaign"}
{"inVertex":{"id":"36b6e7b2-3d78-3229-9ebd-05c2c5f5927b","label":"Lead"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"c2b6e7b2-3d78-16d0-ee95-46b66108236e","label":"hasLead"}
{"inVertex":{"id":"36b6e7b2-3d78-3229-9ebd-05c2c5f5927b","label":"Lead"},"outVertex":{"id":"58b6e79f-6809-6fc4-9f0a-c8a26337a729","label":"Campaign"},"id":"04b6e7b2-3d79-3d95-855e-a206d38b8603","label":"hasLead"}
{"inVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"outVertex":{"id":"64b6e79c-d58b-37ad-6c3e-63a783e6df97","label":"Company"},"id":"ccb6e7a8-449b-d92c-1330-4f6288ab0852","label":"hasProject"}
{"inVertex":{"id":"7eb6e7dc-94f9-ca83-df4c-87284897151f","label":"Lead"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"d2b6e7dc-94fb-8219-30a2-d304ccaed75d","label":"hasLead"}
{"inVertex":{"id":"d0b6e79f-692a-8c03-112e-9388e54b1f9d","label":"Campaign"},"outVertex":{"id":"1cb6e79d-1ca7-4d3c-e71d-c05c13abac15","label":"Project"},"id":"3cb6e79f-692b-4cad-48ac-1e4991e75b60","label":"hasCampaign"}

我正在运行以下查询来获取与项目和特定 Activity 相关的潜在客户。

        GraphTraversal t =g.V("1cb6e79d-1ca7-4d3c-e71d-c05c13abac15").out("hasLead")
                .where(in("hasLead").has("Campaign","name","Campaign1V"));

这将在输出中返回有关潜在客户的信息,我想知道是否有一种方法可以获取特定的营销 Activity 信息以及输出响应中的 ID 信息(使用单个遍历语句),以便 UI 组件可以利用它在 HTML 中呈现。

最佳答案

您只需将结果转换为您想要的形式即可。在这种情况下,您可以使用类似 project()

g.V("1cb6e79d-1ca7-4d3c-e71d-c05c13abac15").out("hasLead").
  where(__.in("hasLead").has("Campaign","name","Campaign1V")).
  project('lead','campaign').
    by().
    by(__.in("hasLead").has("Campaign","name","Campaign1V").fold())

您可能希望在第一个 by() 调制器中包含一些内容,以进一步将顶点转​​换为您想要的属性,并且您可能也希望对第二个调制器执行相同的操作。此外,仅当每个潜在客户有多个广告系列时才需要 fold()

所以,上面的代码工作得很好并且很容易理解,但它确实遍历了相同的“hasLead”边两次。您可以避免这种情况,但它会给可读性增加一些误导,您必须决定是否可以忍受:

g.V("1cb6e79d-1ca7-4d3c-e71d-c05c13abac15").out("hasLead").
  project('lead','campaign').
    by().
    by(__.in("hasLead").has("Campaign","name","Campaign1V").fold()).
  filter(select('campaign').unfold())

现在,您计划所有“潜在客户”,但过滤掉“营销 Activity ”列表为空的任何潜在客户。

关于java - 编译 gremlin 遍历查询的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58445446/

相关文章:

gremlin - 使用 JanusGraph 的 ReferenceEdge 序列化错误

gremlin - JanusGraph 交易和配置

groovy - 禁用选项卡以在 Gremlin 控制台中显示控制台命令

java - 检查空值时 onPostExecute 中 AsyncTask 中的空指针异常

java - 无法从同一网络java访问webservice

java - 第二个 Controller 方法调用时出现 401 错误

java - 为什么我的流复制过程性能稳定下降

Gremlin:在 AWS Neptune 中执行文本搜索

java - g.addV().property(T.label, "SomeLabel") 与 g.addV ("SomeLabel")

Python - 连接到 AWS Neptune