Neo4j BatchInserter和TimelineIndex [v1.9.4]

时间:2014-01-06 12:12:58

标签: neo4j batch-insert

我正在使用BatchInserterIndex将大量数据摄取到Neo4j DB。我打算在批处理期间向TimelineIndex(Lucene)添加节点。现在,以正常方式,TimelineIndex采用(node,long)来添加索引。它可能在内部使用密钥'timestamp'。 (在github中检查LuceneTimeline.java)

我的问题是我能够将节点插入TL索引但不能使用常规Java API检索它们。它始终将timelineIndex.getFirst()返回为null。 我已将索引初始化如下。

常规访问方式

TimelineIndex<Node> timelineIndex = new LuceneTimeline<Node>(graphDB, indexMgr.forNodes("airing-timeline")); //graphDb initialised properly earlier.
timelineIndex.add(node, 1234560000L);

批量摄取

BatchInserterIndex timelineIndex = indexProvider.nodeIndex("airing-timeline", MapUtil.stringMap("type", "exact")); //Initialised just like regular way

Map<String, Object> timelineIndexPropertiesMap = new HashMap<String, Object>();
timelineIndexPropertiesMap.put("timestamp", 1234560000L); //Checked the code of LuceneTimeline.java and found this internal property for timeline
timelineIndex.query("*:*").size(); // return 0 (zero)
timelineIndex.add(airing_node_id, timelineIndexPropertiesMap);
timelineIndex.query("*:*").size(); // return 1 (one)

现在,当我尝试使用timelineIndex.getFirst()来检索Batch Inserter添加的数据时,它总是返回null。 但是,在SAME DB上以常规方式添加的节点会返回正确的值。

我哪里错了?

1 个答案:

答案 0 :(得分:0)

在插入timelineindex的BatchInserterIndex方法中,键是“timestamp”,值应该是numeric类型的ValueContext的实例。 因此,您需要调用静态函数ValueContext.numeric(value)

timelineIndexPropertiesMap.put("timestamp", ValueContext.numeric(12345678L);

访问时间轴索引值的方法是相同的。