【问题标题】:MissingMethodException - org.neo4j.kernel.impl.coreapi.schema.IndexDefinitionImpl.createNode() - GroovyMissingMethodException - org.neo4j.kernel.impl.coreapi.schema.IndexDefinitionImpl.createNode() - Groovy
【发布时间】:2014-11-17 17:52:13
【问题描述】:

我实际上被困了几个小时..

我的代码很简单,只想使用标签索引添加几个节点。 没有索引的东西(不要创建 createDeferredSchemaIndex )代码可以正常工作。

我的例外是:


groovy.lang.MissingMethodException: No signature of method: org.neo4j.kernel.impl.coreapi.schema.IndexDefinitionImpl.createNode() is applicable for argument types: (java.util.LinkedHashMap, [Lorg.neo4j.graphdb.Label;) values: [[tag:START], [MacMorphoTag]]
    at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:56)
    at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
    at NextGenBatchInserterWithId$_run_closure1.doCall(NextGenBatchInserterWithId.groovy:110)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:90)
    at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:324)
    at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:278)
    at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1016)
    at groovy.lang.Closure.call(Closure.java:423)
    at groovy.lang.Closure.call(Closure.java:439)
    at org.codehaus.groovy.runtime.DefaultGroovyMethods.callClosureForLine(DefaultGroovyMethods.java:4281)
    at org.codehaus.groovy.runtime.IOGroovyMethods.eachLine(IOGroovyMethods.java:466)
    at org.codehaus.groovy.runtime.ResourceGroovyMethods.eachLine(ResourceGroovyMethods.java:288)
    at org.codehaus.groovy.runtime.ResourceGroovyMethods.eachLine(ResourceGroovyMethods.java:253)
    at org.codehaus.groovy.runtime.dgm$797.invoke(Unknown Source)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoMetaMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:271)
    at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:53)
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:120)
    at NextGenBatchInserterWithId.run(NextGenBatchInserterWithId.groovy:71)
    at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:258)
    at groovy.lang.GroovyShell.run(GroovyShell.java:502)
    at groovy.lang.GroovyShell.run(GroovyShell.java:491)
    at groovy.ui.GroovyMain.processOnce(GroovyMain.java:650)
    at groovy.ui.GroovyMain.run(GroovyMain.java:381)
    at groovy.ui.GroovyMain.process(GroovyMain.java:367)
    at groovy.ui.GroovyMain.processArgs(GroovyMain.java:126)
    at groovy.ui.GroovyMain.main(GroovyMain.java:106)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:106)
    at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:128)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caught: groovy.lang.MissingMethodException: No signature of method: org.neo4j.kernel.impl.coreapi.schema.IndexDefinitionImpl.shutdown() is applicable for argument types: () values: []
groovy.lang.MissingMethodException: No signature of method: org.neo4j.kernel.impl.coreapi.schema.IndexDefinitionImpl.shutdown() is applicable for argument types: () values: []
    at NextGenBatchInserterWithId.run(NextGenBatchInserterWithId.groovy:182)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

我知道与我的参数不匹配的签名方法,但是通过这里的 Neo4J 代码:https://github.com/neo4j/neo4j/blob/master/community/kernel/src/main/java/org/neo4j/unsafe/batchinsert/BatchInserterImpl.java
在线 578:
public long createNode(地图属性,标签...标签)

这正是我从我的 groovy 中发送的。



batch = org.neo4j.unsafe.batchinsert.BatchInserters.inserter(store,config)
batch = batch.createDeferredSchemaIndex( macMorphoTagLabel ).on( 'tag' ).create();
...

Label macMorphoTagLabel = DynamicLabel.label( 'MacMorphoTag' );

def Label[] macMorphoTagArray = [macMorphoTagLabel]
if (!tags[previousWordTag.macMorphoTag]) {
                        tags[previousWordTag.macMorphoTag] = batch.createNode([tag: previousWordTag.macMorphoTag], macMorphoTagArray)
                    }

我在这里错过了什么?我正在使用 Groovy 2.3.7 + Neo4j 2.1.5

例如 -> 我的完整代码:http://pastebin.com/Z98tMDYi 问题发生在第 110 行
我的 Json 文件是:http://pastebin.com/xSxZd4ke(作为 UTF-8 文件)

【问题讨论】:

  • 你可以试试batch.createNode(*macMorphoTagArray, tag: previousWordTag.macMorphoTag)
  • 运气不好,得到groovy.lang.MissingMethodException: No signature of method: org.neo4j.kernel.impl.coreapi.schema.IndexDefinitionImpl.createNode() is applicable for argument types: (java.util.LinkedHashMap, org.neo4j.graphdb.DynamicLabel) values: [[tag:START], MacMorphoTag] at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:56) at org.codehaus.groovy.runtime.callsite.PojoMetaClassSite.call(PojoMetaClassSite.java:46)

标签: java groovy neo4j


【解决方案1】:

在第 66 行,您重新分配了 batch 变量。替换

batch = batch.createDeferredSchemaIndex( macMorphoTagLabel ).on( 'tag' ).create();

batch.createDeferredSchemaIndex( macMorphoTagLabel ).on( 'tag' ).create();

【讨论】:

  • 完美!那就是问题所在。我从这里关注了一个旧问题,该问题使用了几个批处理变量,但没有检查方法返回.. 让我感到羞耻。另一个快速帮助,如果您看到我的 createNode 代码,我实际上是为节点设置了我自己的 ID,只是为了在处理三元组数组的节点上有正确的 ID。执行需要很长时间(比没有我的 ID 慢 10 倍)。这是一种不好的做法吗?
  • 您提供的 id 基本上是商店文件中的位置。如果你使用随机的 long,文件会变得 huge。最佳做法是使用序列号或依赖从 createNode 返回的 id 并传入一个。
  • 由于我的问题是一次插入数据,并且我使用的是带有自动增量的长变量,看起来很好。我只是与我的数据方法有太多关系:一个节点-指向节点组的单词,其值数组(始终为 3)指向标签的 3 个节点(通过数组中的节点 ID)。并且这些组有 TO 和 FROM 关系..我需要考虑更多.. 33MB 的文本文件现在是 150MB+ 的数据库 127 仅用于关系.. o.O 它使查询变得糟糕。
  • 我只是想知道我的真实交易文件的索引内容没有按时发生。插入后,我使用标签架构索引进行了查询,花了 4 分钟。 MATCH (word:Palavra { word: 'Jersei' }) return word
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 2018-12-26
  • 1970-01-01
  • 2013-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多