2013-02-06 109 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,谢谢你的明确解释。 –