【问题标题】:How to search indexed nodes in neo4j如何在 neo4j 中搜索索引节点
【发布时间】:2013-02-06 17:23:46
【问题描述】:

我正在像这样索引 neo4 节点

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&lt;Node&gt; nodes = nodesIndex.query("*:*"+pattern+"*"); 但这很有效。

任何人都可以告诉我如何使用所有键在 neo4j 中搜索索引节点。

Edit :一键搜索 Associate_Name --> 如果给定的模式存在于 Associate_Name 键中,那么将返回那么多节点。

但我想搜索给定模式是否存在于特定节点的任何键中,对所有节点执行此搜索,哪些节点包含任何应该返回的值的给定模式。

感谢您的建议,但我的要求将满足 OR 这样的需求

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

这是搜索节点的好方法吗?

【问题讨论】:

    标签: lucene neo4j


    【解决方案1】:

    “所有的钥匙”是什么意思?您的意思是要获取与某个键关联的所有节点,还是要获取索引中的所有节点?

    要搜索与某个键关联的所有节点:nodesIndex.query("Associate_Name:*")

    搜索索引中的所有节点:nodesIndex.query("*:*")

    【讨论】:

    • 如果您正在查找节点上的所有密钥:nodesIndex.query("kye1:"+pattern1+" AND key2:"+pattern2+" AND key3_part:"+pattern3_part+"* ")
    • 我认为他的意思是他想在每个键中搜索相同的模式,但他不想单独指定每个键。因此,如果他的节点有五个属性,他想指定类似query("*:*mySearchpattern*") 的内容,并针对所有五个属性检查*mySearchPattern*
    猜你喜欢
    • 2015-08-20
    • 2013-05-25
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多