2013-06-11 24 views
1

我认为标题有点模糊,所以我要解释我的问题。Neo4j中的Lucene索引不能按预期工作

我创造了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”一样

对此有何想法?

感谢

+0

您应该更新该索引也是(首先删除,然后添加)。 – tstorms

+0

现在就试试吧! – Anas

+0

你是对的!其实,我认为索引被绑定到Node和所选择的属性上。谢谢 – Anas

回答

0

那么作为tstorms建议,解决的办法是更新属性后,删除索引:

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

然后用新的属性添加:

myindex.add(n, "familyname","fname"); 
+0

或使用[autoindex](http://docs.neo4j.org/chunked/stable/auto-indexing.html) –

+0

我不能这样做,因为我是使用一些特定的索引在db中排序我的元素。例如:实体人员,学校,公司每个人都有一个索引 – Anas

+0

另外,请看透明索引的Neo4j 2.0 Label支持,它没有这些问题,http://www.neo4j.org/develop/labels –