2013-02-06 108 views
1

我索引neo4節點這樣如何搜索索引節點的Neo4j

BatchInserterIndexProvider indexProvider = new LuceneBatchInserterIndexProvider(db); 
logger.info("indexer created :" + indexProvider); 
BatchInserterIndex nodeIndexer = indexProvider.nodeIndex("actors", MapUtil.stringMap("type", "exact")); 
nodeIndexer.setCacheCapacity("name", 100000); 
long indexId = db.createNode(map); 
nodeIndexer.add(indexId, map); 

同時搜索節點,我能夠一個鍵搜索,但我想在所有的鍵進行搜索。

List<Node> nodesList = new ArrayList<Node>(); 
IndexManager manager = graphDatabaseService.index(); 
org.neo4j.graphdb.index.Index<Node> nodesIndex = manager.forNodes("actors"); 
IndexHits<Node> nodes = nodesIndex.query("Associate_Name:*" + pattern + "*"); 
Node aNode = null; 
while (nodes.hasNext()) { 
    nodesList.add(nodes.next()); 
} 

return nodesList; 

我試過IndexHits<Node> nodes = nodesIndex.query("*:*"+pattern+"*");但是這個努力工作。

任何機構都可以告訴我如何使用所有密鑰在neo4j中搜索索引節點。

編輯:使用一個關鍵Associate_Name搜索 - >如果給定模式存在於Associate_Name鍵中,那麼將返回那些多個節點。

但我想搜索給定的模式是否存在於特定節點的任何Key中,對所有節點執行此搜索,哪些節點包含應返回的任何值中的給定模式。

感謝您的建議,但我的要求將與OR這樣

nodesIndex.query("kye1:"+pattern1+" OR key2:"+pattern2+" OR key3_part:"+pattern3_part+"* ") 

履行是搜索節點這種好辦法嗎?

回答

1

你是什麼意思'所有的鑰匙'?你的意思是你想要獲得與某個關鍵字相關的所有節點,或者索引中的所有節點?

要搜索與鍵關聯的所有節點:nodesIndex.query("*:*")

+0

並且如果你正在尋找一個節點上的所有鍵:nodesIndex.query("Associate_Name:*")

要在一個索引搜索所有節點'nodesIndex.query( 「kye1:」+ pattern1 +「AND key2:」+ pattern2 +「AND key3_part:」+ pattern3_part +「*」)' – ulkas

+1

我想他的意思是他想搜索每一個相同模式的密鑰,但他不想必須單獨指定每個密鑰。因此,如果他的節點有五個屬性,他希望指定類似於'query(「*:* mySearchpattern *」)''和'* mySearchPattern *'的所有五個屬性。 – ean5533

+0

正確@ ean5533,謝謝你的明確解釋。 –