2016-05-27 2 views
0

У меня возникла странная проблема с моим вставным устройством. Пакетная вставка работает нормально, но когда я запускаю сервер из этого места, CYPHER не может фильтровать свойство.Neo4j batch inserter

Запрос "match(a) return a" возвращает все узлы. Но в тот момент, когда я пытаюсь отфильтровать его на основе любого свойства, он не возвращает ни одной строки. Запрос match(a) where a.Name="Someone" return a ничего не возвращает.

Если я запустил команду SET SET, чтобы обновить свойство, то я могу отфильтровать его в порядке. Похоже на проблему с индексом, но не в состоянии точно разобраться.

 
**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

Код выглядит ошеломляющим, вам не нужен node_auto_index –

+0

Вам нужно удалить «» или лучше использовать правильный парсер CSV, такой как OpenCSV, или даже лучше использовать инструмент импорта neo4j. –

ответ

0

Если это проблема индекса, удаление и воссоздание индекса может исправить.

+0

Это не поможет в реальном сценарий жизни. Мне нужно выяснить, где это происходит в коде ввода. –

Смежные вопросы