Neo4j索引和遗留数据
我有一个要查询的遗留数据集(表示为GraphML)。在一个相关问题中,建议我使用Cypher查询数据库。我的查询用例很简单:给定消息id(消息节点的属性),检索具有该id的节点,还检索该消息的发送方和接收方节点 似乎要在Cypher中实现这一点,我首先必须创建一个节点索引。当从graphML文件加载数据时,是否有方法自动执行此操作?(我曾使用Gremlin加载数据并创建数据库。) 我还有一个数据的外部Lucene索引(我需要它用于其他目的)。有两个索引有意义吗?例如,我可以将Neo4J节点ID索引到我的外部索引中,然后根据这些ID查询图形。我关心的是这些ID的持久性。(类似地,Lucene文档ID不应被视为持久的。) 那么,我是否应该:Neo4j索引和遗留数据,neo4j,cypher,gremlin,Neo4j,Cypher,Gremlin,我有一个要查询的遗留数据集(表示为GraphML)。在一个相关问题中,建议我使用Cypher查询数据库。我的查询用例很简单:给定消息id(消息节点的属性),检索具有该id的节点,还检索该消息的发送方和接收方节点 似乎要在Cypher中实现这一点,我首先必须创建一个节点索引。当从graphML文件加载数据时,是否有方法自动执行此操作?(我曾使用Gremlin加载数据并创建数据库。) 我还有一个数据的外部Lucene索引(我需要它用于其他目的)。有两个索引有意义吗?例如,我可以将Neo4J节点ID索
node\u auto\u index=true
,还必须对其进行配置
要实际自动索引某些内容,必须设置哪些属性
应该被索引。为此,可以列出要索引的属性键
在…上在配置文件中,使用节点_keys_indexable和
关系键\可索引配置键。当使用嵌入式
模式下,使用GraphDatabaseSettings.node_keys_indexable和
GraphDatabaseSettings.relationship_keys_indexable配置键。
在所有情况下,该值都应该是以逗号分隔的属性列表
索引的键
那么Gremlin应该设置GraphDatabaseSettings
参数吗?我尝试将一个映射传递到Neo4jGraph构造函数,如下所示:
Map<String,String> config = [
'node_auto_indexing':'true',
'node_keys_indexable': 'emailID'
]
Neo4jGraph g = new Neo4jGraph(graphDB, config);
g.loadGraphML("../databases/data.graphml");
ReadableIndex<Node> autoNodeIndex = graph.rawGraph.index()
.getNodeAutoIndexer()
.getAutoIndex();
def node = autoNodeIndex.get( "emailID", "<2614099.1075839927264.JavaMail.evans@thyme>" ).getSingle();
我的检索是这样做的:
Map<String,String> config = [
'node_auto_indexing':'true',
'node_keys_indexable': 'emailID'
]
Neo4jGraph g = new Neo4jGraph(graphDB, config);
g.loadGraphML("../databases/data.graphml");
ReadableIndex<Node> autoNodeIndex = graph.rawGraph.index()
.getNodeAutoIndexer()
.getAutoIndex();
def node = autoNodeIndex.get( "emailID", "<2614099.1075839927264.JavaMail.evans@thyme>" ).getSingle();
ReadableIndex autoNodeIndex=graph.rawGraph.index()
.getNodeAutoIndexer()文件
.getAutoIndex();
def node=autoNodeIndex.get(“emailID”,即“”).getSingle();
这似乎奏效了。但是,请注意,
Neo4jGraph
对象上的getindex()
调用仍然返回空列表。因此,结果是我可以正确地使用neo4japi,但Gremlin包装器似乎无法反映索引状态。表达式g.idx('node\u auto\u index')
(中有说明)返回null。您尝试过自动索引功能吗?它基本上就是您正在寻找的用例——不幸的是,在导入数据之前需要启用它。(否则,必须删除/添加属性以重新为其编制索引。)
自动索引是惰性创建的。也就是说,当您启用自动索引时,实际索引将在您为第一个属性编制索引时首先创建。确保在检查索引是否存在之前插入数据,否则它可能不会显示 有关一些自动索引代码(使用编程配置),请参见例如(这是与Neo4j 1.8一起使用的)
/peter我一直在这条路上慢慢走,但没走多远。我更新了问题,以反映我目前缺乏进展。嗯,不幸的是,我没有在embedded上做太多工作。REST服务很简单。我会看看是否能找到人来回答这个问题。在创建
Neo4jGraph
instance,我从graphml文件加载数据。加载成功,因为我可以遍历图形,但通过getIndexs()枚举索引
结果是一个空列表。因此,我不认为自动索引被列出,因为它是内置的。你能用它搜索资料吗?是的,事实证明,自动索引确实有效。它确实认为它没有在其他索引中被枚举是违反直觉的。