1

我认为标题有点模糊,所以我将准确地解释我的问题。

我在 Neo4j 中创建了一些节点,然后像这样索引它们:

Index<Node> myindex = graphDb.index().forNodes(
                "myindex",
                MapUtil.stringMap(IndexManager.PROVIDER, "lucene", "type",
                        "fulltext"));

Node n = graphDb.createNode(); //create the node
node.setProperty("firstname", "firstname"); //add properties
node.setProperty("familyname", "familyname");
myindex.add(node, "familyname", "familyname"); //index it 

但是当我需要更新节点“n”的属性时(例如将“familyname”更改为“fname”),通过基于索引的搜索无法再找到该节点!

所以在更新属性之前,这个密码查询

start n= node:myindex(familyname:"familyname") return n
正在返回节点,而在更新后,我期待:

start n= node:myindex(familyname:"fname") return n

使用新属性返回相同的节点,但它不起作用!虽然第一个查询始终有效,例如索引是否绑定到属性“familyname”

对此有什么想法吗?

谢谢

4

1 回答 1

0

因此,正如tstorms建议的那样,解决方案是在更新属性后删除索引:

n.setProperty("familyname","fname");
myindex.remove(n);

然后用新属性添加它:

myindex.add(n, "familyname","fname");
于 2013-06-11T14:47:29.830 回答