2013-07-25 45 views
0

平臺:的Neo4j + Neography批量導入= BadInputException對於輸入字符串: 「{0} 」」

  • 的Neo4j - 圖形數據庫內核2.0.0-M03(服務器)
  • 1.7的jruby .4(1.9.3p392)2013-05-16 2390d3b上Java HotSpot(TM)64位服務器VM 1.7.0_25-b15 [linux-amd64]
  • neography(1.1.1)用於與neo4j交互的REST API

我有一系列的產品uct節點,已經存儲在neo4j中的已建立索引的目錄編號屬性,並且我試圖批量插入這些產品的子版本/變體的SKU,與SKU的關係 - >父產品目錄編號

我有下面的代碼:

#items is an array of skus 

items.each do |item| 
    commands = [] 

    #get the node we want to create a relationship to 
    commands << [:get_node_index, PRODUCT_CATALOG_INDEX, :catalog_number, item[:catalog_number]] 
    commands << [:create_node, {sku: item[:sku]}] 
    commands << [:add_node_to_index, PRODUCT_SKU_INDEX, :sku, item[:itemnumber], '{1}'] 
    commands << [:create_relationship, "product_variation_of", '{1}', '{0}'] 

    @neo.batch *commands 

end 

這返回的錯誤(在底部完整的堆棧跟蹤)

, "body"=>{"message"=>"For input string: \"{0}\"" 
, "exception"=>"BadInputException" 
, "fullname"=>"org.neo4j.server.rest.repr.BadInputException" 

顯然,我在這裏做得不對,但我似乎無法看到它是。我想知道是否有問題:[:get_node_index, PRODUCT_CATALOG_INDEX, :catalog_number, item[:catalog_number]],那不允許{0}的節點引用?我真的不確定。

任何幫助表示讚賞!

完整的堆棧跟蹤,用's的\n

E 
, [2013-07-25T19:18:37.080000 #29182] ERROR -- : 400 error: [{"id"=>0 
, "from"=>"/index/node/product_catalog_number/catalog_number/1234" 
, "body"=>[{"extensions"=>{} 
, "outgoing_relationships"=>"http://dev.local:7474/db/data/node/531/relationships/out" 
, "labels"=>"http://dev.local:7474/db/data/node/531/labels" 
, "all_typed_relationships"=>"http://dev.local:7474/db/data/node/531/relationships/all/{-list|&|types}" 
, "traverse"=>"http://dev.local:7474/db/data/node/531/traverse/{returnType}" 
, "self"=>"http://dev.local:7474/db/data/node/531" 
, "property"=>"http://dev.local:7474/db/data/node/531/properties/{key}" 
, "properties"=>"http://dev.local:7474/db/data/node/531/properties" 
, "outgoing_typed_relationships"=>"http://dev.local:7474/db/data/node/531/relationships/out/{-list|&|types}" 
, "incoming_relationships"=>"http://dev.local:7474/db/data/node/531/relationships/in" 
, "create_relationship"=>"http://dev.local:7474/db/data/node/531/relationships" 
, "paged_traverse"=>"http://dev.local:7474/db/data/node/531/paged/traverse/{returnType}{?pageSize 
,leaseTime}" 
, "all_relationships"=>"http://dev.local:7474/db/data/node/531/relationships/all" 
, "incoming_typed_relationships"=>"http://dev.local:7474/db/data/node/531/relationships/in/{-list|&|types}" 
, "data"=>{"title"=>"MY PRODUCT" 
, "catalog_number"=>"1234"} 
, "indexed"=>"http://dev.local:7474/db/data/index/node/product_catalog_number/catalog_number/1234/531"}] 
, "status"=>200} 
, {"id"=>1 
, "from"=>"/node" 
, "body"=>{"extensions"=>{} 
, "outgoing_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/out" 
, "labels"=>"http://dev.local:7474/db/data/node/1239/labels" 
, "all_typed_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/all/{-list|&|types}" 
, "traverse"=>"http://dev.local:7474/db/data/node/1239/traverse/{returnType}" 
, "self"=>"http://dev.local:7474/db/data/node/1239" 
, "property"=>"http://dev.local:7474/db/data/node/1239/properties/{key}" 
, "properties"=>"http://dev.local:7474/db/data/node/1239/properties" 
, "outgoing_typed_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/out/{-list|&|types}" 
, "incoming_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/in" 
, "create_relationship"=>"http://dev.local:7474/db/data/node/1239/relationships" 
, "paged_traverse"=>"http://dev.local:7474/db/data/node/1239/paged/traverse/{returnType}{?pageSize 
,leaseTime}" 
, "all_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/all" 
, "incoming_typed_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/in/{-list|&|types}" 
, "data"=>{"sku"=>"0320442A5"}} 
, "location"=>"http://dev.local:7474/db/data/node/1239" 
, "status"=>201} 
, {"id"=>2 
, "from"=>"/index/node/product_sku" 
, "body"=>{"extensions"=>{} 
, "outgoing_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/out" 
, "labels"=>"http://dev.local:7474/db/data/node/1239/labels" 
, "all_typed_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/all/{-list|&|types}" 
, "traverse"=>"http://dev.local:7474/db/data/node/1239/traverse/{returnType}" 
, "self"=>"http://dev.local:7474/db/data/node/1239" 
, "property"=>"http://dev.local:7474/db/data/node/1239/properties/{key}" 
, "properties"=>"http://dev.local:7474/db/data/node/1239/properties" 
, "outgoing_typed_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/out/{-list|&|types}" 
, "incoming_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/in" 
, "create_relationship"=>"http://dev.local:7474/db/data/node/1239/relationships" 
, "paged_traverse"=>"http://dev.local:7474/db/data/node/1239/paged/traverse/{returnType}{?pageSize 
,leaseTime}" 
, "all_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/all" 
, "incoming_typed_relationships"=>"http://dev.local:7474/db/data/node/1239/relationships/in/{-list|&|types}" 
, "data"=>{"sku"=>"0320442A5"} 
, "indexed"=>"http://dev.local:7474/db/data/index/node/product_sku/sku/0320442A5/1239"} 
, "location"=>"http://dev.local:7474/db/data/index/node/product_sku/sku/0320442A5/1239" 
, "status"=>201} 
, {"id"=>3 
, "from"=>"http://dev.local:7474/db/data/node/1239/relationships" 
, "body"=>{"message"=>"For input string: \"{0}\"" 
, "exception"=>"BadInputException" 
, "fullname"=>"org.neo4j.server.rest.repr.BadInputException" 
, "stacktrace"=>["org.neo4j.server.rest.web.RestfulGraphDatabase.extractNodeId(RestfulGraphDatabase.java:199)" 
, "org.neo4j.server.rest.web.RestfulGraphDatabase.createRelationship(RestfulGraphDatabase.java:564)" 
, "java.lang.reflect.Method.invoke(Method.java:606)" 
, "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" 
, "org.neo4j.server.web.Jetty6WebServer.invokeDirectly(Jetty6WebServer.java:291)" 
, "org.neo4j.server.rest.web.StreamingBatchOperations.invoke(StreamingBatchOperations.java:66)" 
, "org.neo4j.server.rest.batch.BatchOperations.performRequest(BatchOperations.java:188)" 
, "org.neo4j.server.rest.batch.BatchOperations.parseAndPerform(BatchOperations.java:159)" 
, "org.neo4j.server.rest.web.StreamingBatchOperations.readAndExecuteOperations(StreamingBatchOperations.java:54)" 
, "org.neo4j.server.rest.web.BatchOperationService$1.write(BatchOperationService.java:89)" 
, "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)"] 
, "cause"=>{"message"=>"For input string: \"{0}\"" 
, "exception"=>"NumberFormatException" 
, "fullname"=>"java.lang.NumberFormatException" 
, "stacktrace"=>["java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)" 
, "java.lang.Long.parseLong(Long.java:441)" 
, "java.lang.Long.parseLong(Long.java:483)" 
, "org.neo4j.server.rest.web.RestfulGraphDatabase.extractNodeId(RestfulGraphDatabase.java:195)" 
, "org.neo4j.server.rest.web.RestfulGraphDatabase.createRelationship(RestfulGraphDatabase.java:564)" 
, "java.lang.reflect.Method.invoke(Method.java:606)" 
, "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" 
, "org.neo4j.server.web.Jetty6WebServer.invokeDirectly(Jetty6WebServer.java:291)" 
, "org.neo4j.server.rest.web.StreamingBatchOperations.invoke(StreamingBatchOperations.java:66)" 
, "org.neo4j.server.rest.batch.BatchOperations.performRequest(BatchOperations.java:188)" 
, "org.neo4j.server.rest.batch.BatchOperations.parseAndPerform(BatchOperations.java:159)" 
, "org.neo4j.server.rest.web.StreamingBatchOperations.readAndExecuteOperations(StreamingBatchOperations.java:54)" 
, "org.neo4j.server.rest.web.BatchOperationService$1.write(BatchOperationService.java:89)" 
, "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)"]}} 
, "status"=>400}] 

回答

2

代替你是不是正確的。您不能將索引中的結果用作單個節點引用,因爲您可以從該索引查找中獲取集合。 (說你索引的名字,你得到所有名爲bob的人,並且你得到10回...問題。)

因此運行索引查詢,從數組中返回第一個節點id,然後把它作爲正確的ID傳遞給你的批處理。

+0

啊哈!因爲'get_node_index'返回一個數組,所以無法確定它打算使用哪個索引。也許,只需先獲取ID,然後再進行導入也會更快,因爲這樣做的處理會更少。非常感激。這很有道理。 –

1

標識符{0}等現在只能引用未通過索引獲取命令設置的位置標題,因爲它們可以返回任意數量的節點。

AFAIK get-or-create命令設置正確的位置標題。

POST http://localhost:7474/db/data/index/node/PRODUCT_CATALOG_INDEX?uniqueness=get_or_create \ 
{"key" : "catalog_number","value" : item[:catalog_number],\ 
"properties" : {"catalog_number" : item[:catalog_number]}} 
相關問題