我在尝试使用 ElasticSearch 在 Titan 中创建和使用索引类型时遇到问题。我正在使用 Titan Server 0.4.0 并且有一个 groovy 脚本执行以下操作:
设置配置:
config.setProperty("storage.backend","cassandra") config.setProperty("storage.hostname","127.0.0.1")
config.setProperty("storage.index.elastic.backend","elasticsearch") config.setProperty("storage.index.elastic.directory","db/es") config.setProperty("storage.index.elastic.client -only","false") config.setProperty("storage.index.elastic.local-mode","true")
创建顶点和边属性:
g.makeKey("property1").dataType("type").indexed("elastic",Vertex.class).make() g.makeKey("property2").dataType("type").indexed("elastic ",Vertex.class).make()
从单独的 CSV 文件加载顶点和边:
new File("path-to-csv").each({ line -> (property1,property2) = line.split(",")
v = bg.addVertex(id)
v.setProperty("property1",property1)
v.setProperty("property2",property2) })
每当我忽略步骤 3 中的循环并使用 gremlin 控制台简单地添加示例顶点/边/属性时,它似乎工作正常。但是,当我在一个 groovy 脚本中运行它时(它需要一个顶点和边 csv 文件并将数据加载到 Titan),我收到以下错误:
javax.script.ScriptException: com.thinkaurelius.titan.core.TitanException: Could not commit transaction due to exception during persistence
对此错误的研究表明这是资源锁定、并发属性设置或唯一属性的问题,但是我没有在我的代码中使用任何这些。当我手动输入它们时它的工作方式似乎很不寻常,但是当我在脚本中运行它时它会中断 - 脚本是否可能会超越自身并在设置属性索引之前尝试为属性分配值(步骤 3)在第 2 部分?
谢谢,亚当