2016-05-27 9 views
0

Ich habe seltsames Problem mit meinem Batch-Inserter. Der Batch-Inserter funktioniert einwandfrei, aber wenn ich den Server von diesem Standort aus starte, kann CYPHER die Eigenschaft nicht filtern.Neo4j Batch-Inserter

Abfrage "match(a) return a" gibt alle Knoten zurück. Aber in dem Moment, in dem ich versuche, es basierend auf einer Eigenschaft zu filtern, gibt es keine Zeile zurück. Abfrage match(a) where a.Name="Someone" return a gibt nichts zurück.

Wenn ich run SET-Befehl ausführen, um die Eigenschaft zu aktualisieren, dann bin ich in der Lage, es fein zu filtern. Sieht aus wie Index-Problem, aber nicht in der Lage, genau herauszufinden.

 
**Output of - `match(a) return a` -** 

╒══════════════════════════════╕ 
│a        │ 
╞══════════════════════════════╡ 
│{}       │ 
├──────────────────────────────┤ 

│{Company: "Neo Technology", ye│ 
│ar: 2013, Name: "Kenny Bastani│ 
│"}       │ 
├──────────────────────────────┤ 
│{Company: "Neo Technology", ye│ 
│ar: 2010, Name: "Michael Hunge│ 
│r"}       │ 
├──────────────────────────────┤ 
│{Company: "Heroku", year: 2011│ 
│, Name: "James Ward"}   │ 
├──────────────────────────────┤ 
│{Name: "Someone"}    │ 
├──────────────────────────────┤ 
│{Company: "Doe.com", year: "ni│ 
│netynine", Name: "John"}  │ 
└────── 
 
**File -** 

    Name,Company,year 

    "Kenny Bastani","Neo Technology",2013 

    "Michael Hunger","Neo Technology",2010 

    "James Ward","Heroku",2011 

    "Someone",, 

    "John","Doe.com","ninetynine" 

 
**Batch Inserter-** 

    public void importNodes() throws IOException { 
      FileInputStream fis = new FileInputStream(
        "E:\\neo4j\\CSV_Import\\01.csv"); 
      InputStreamReader isr = new InputStreamReader(fis); 
      BufferedReader br = new BufferedReader(isr); 
      String line = null; 

      File storeDir = new File("E:\\neo4j\\test_data1"); 
      FileUtils.deleteRecursively(storeDir); 


      BatchInserter neoBatchInserter = BatchInserters.inserter(storeDir); 

      Map properties = new HashMap(); 
      ArrayList headerMap = new ArrayList(); 

      BatchInserterIndexProvider indexProvider = new LuceneBatchInserterIndexProvider(
        neoBatchInserter); 

      BatchInserterIndex autoIndex = indexProvider.nodeIndex("node_auto_index", 
        MapUtil.stringMap("type", "exact")); 

      autoIndex.setCacheCapacity("Name", 10000); 

      neoBatchInserter.createDeferredSchemaIndex(Labels.Person).on("Name").create(); 

      String propertyName = ""; 

      boolean headerFlag = true; 

      int counter = 0; 

      while ((line = br.readLine()) != null) { 

       String[] values = line.split(","); 

       for (String value : values) { 

        if (headerFlag) { 

         headerMap.add(value); 

        } else { 

         propertyName = headerMap.get(counter); 
         properties.put(propertyName, value); 

        } 

        counter++; 
       } 

       System.out.println("New Node - " + properties); 
       long node = neoBatchInserter.createNode(properties, Labels.Person); 
       autoIndex.add(node, properties); 
       autoIndex.flush(); 

       counter = 0; 
       properties.clear(); 
       headerFlag = false; 

      } 

      indexProvider.shutdown(); 
      neoBatchInserter.shutdown(); 
     } 
+0

Der Code OKish aussieht, brauchen Sie nicht die node_auto_index –

+0

Sie haben die ‚"‘oder besser einen richtigen CSV-Parser wie OpenCSV oder noch besser das Neo4j-Import-Tool verwenden, um zu entfernen. –

Antwort

0

Wenn es ein Index Problem, zu löschen und den Index neu erstellen kann es beheben.

+0

, die nicht in Echt helfen würde, Lebensszenario Ich muss herausfinden, wo es im Einfügercode falsch läuft. –