【问题标题】:JanusGraph indexing in ScalaScala 中的 JanusGraph 索引
【发布时间】:2018-07-14 07:11:45
【问题描述】:

我正在使用 Spark 从数据流中创建 JanusGraph,但在索引和创建属性时遇到问题。我想通过一个名为“register_id”的顶点属性创建一个索引。我不确定我的做法是否正确。

所以,这是我的代码:

var gr1 = JanusGraphFactory.open("/Downloads/janusgraph-cassandra.properties")
gr1.close()
// This is done to clear the graph made in every run.
JanusGraphFactory.drop(gr1)
gr1 = JanusGraphFactory.open("/Downloads/janusgraph-cassandra.properties")
var reg_id_prop = gr1.makePropertyKey("register_id").dataType(classOf[String]).make()
var mgmt = gr1.openManagement()
gr1.tx().rollback()
mgmt.buildIndex("byRegId", classOf[Vertex]).addKey(reg_id_prop).buildCompositeIndex()

当我运行上述内容时,我收到一条错误消息:

“已删除 id 为 5164 的顶点”。

另外,我如何在 Scala 中检查我在图中是否有具有特定属性的顶点。我知道在 gremlin 中,g.V().has('name', 'property_value') 有效,但无法弄清楚如何在 Scala 中执行此操作。我尝试了 Gremlin-Scala 但似乎找不到它。

任何帮助将不胜感激。

【问题讨论】:

  • 嗨,还在为此苦苦挣扎。请帮忙!

标签: scala apache-spark cassandra janusgraph


【解决方案1】:

您应该使用mgmt 对象来构建架构,而不是graph 对象。您还需要确保mgmt.commit() 架构更新。

gr1 = JanusGraphFactory.open("/Downloads/janusgraph-cassandra.properties")
var mgmt = gr1.openManagement()
var reg_id_prop = mgmt.makePropertyKey("register_id").dataType(classOf[String]).make()
mgmt.buildIndex("byRegId", classOf[Vertex]).addKey(reg_id_prop).buildCompositeIndex()
mgmt.commit()

请参阅 JanusGraph 的 indexing 文档。

关于使用复合索引检查顶点是否存在的第二个问题,您需要使用终止步骤完成遍历。例如,在 Java 中,这将返回一个布尔值:

g.V().has('name', 'property_value').hasNext()

请参阅 JanusGraph 的 iterating the traversal 文档。

阅读gremlin-scala README,它看起来有一些终端步骤选项可供您使用,例如headheadOptiontoListtoSet

g.V().has('name', 'property_value').headOption

您还应该查看 gremlin-scala-examples 和 gremlin-scala traversal specification

【讨论】:

  • g.V().has('name', 'property_value').hasNext() 这在 Gremlin 中有效,如何在 Scala 中执行此操作?
  • 用更多指向现有文档的链接更新了我上面的答案
  • 谢谢,只需要澄清一件事。如何根据双/数组的边缘属性索引图形?我试过这样做,它不接受字符串/整数以外的任何东西。此外,在整数上,边缘索引似乎不起作用。例如。 val avg = mgmt.makePropertyKey("avg_val").dataType(classOf[Float]).make() 抛出错误 java.lang.IllegalArgumentException: Not a supported data type: float。将 Float 更改为 Integer/String 使其工作。
  • 您需要使用classOf[java.lang.Float],否则它会将其解析为scala.Float
  • 谢谢,现在可以编译了。但即使在索引了一些边缘属性之后,我在运行 Gremlin 查询时也会收到索引警告。顶点属性索引有效,边缘属性无效。
猜你喜欢
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多