2013-06-11 27 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 –