我正在将节点和关系批量插入到 Neo4j 图形数据库中。一切正常,包括多个属性的索引([String] name, [int] id)
。但是,当我尝试按范围查询属性“id”的索引时,它不会返回任何结果。
问题,正如我从非批处理示例中得出的那样,是我不能提供数字ValueContext
给BatchInserterIndex
这样的:
Map<String, Object> properties = new HashMap<String, Object>(2);
properties.put("name", urs.getString(1));
// I can do this:
properties.put("id", urs.getInt(2));
// But not this (throws an "invalid type" exception):
// properties.put("id", new ValueContext( urs.getInt(2) ).indexNumeric());
long node_id = inserter.createNode(properties);
index.add(node_id, properties);
在批量插入期间,我没有找到任何关于数字索引的文档。
查询代码如下:
IndexManager index = gdb.index();
Index<Node> people = index.forNodes("people");
IndexHits<Node> hits = people.query(
QueryContext.numericRange("id", min_id, max_id)
);
是否可以在批量插入操作中添加数字索引,以便我可以按范围查询值?
谢谢。
编辑
我做错了什么是我试图将相同的属性映射传递给createNode()
and index.add()
。前者崩溃了,因为它不需要ValueContext
也不理解它。因此,请务必将不同的属性映射传递给这些方法,并ValueContext
在用于 的方法中包含 -ed 数值index.add
:
Long value = 1L;
long node_id = inserter.createNode(
MapUtil.map("id", value, "other_prop", other_value));
index.add(node_id,
MapUtil.map("id", ValueContext.numeric( value ), "other_prop", other_value));