У меня возникла странная проблема с моим вставным устройством. Пакетная вставка работает нормально, но когда я запускаю сервер из этого места, 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(); }
Код выглядит ошеломляющим, вам не нужен node_auto_index –
Вам нужно удалить «» или лучше использовать правильный парсер CSV, такой как OpenCSV, или даже лучше использовать инструмент импорта neo4j. –