neo4jphp创建索引

neo4jphp创建索引,php,indexing,neo4j,neo4jphp,Php,Indexing,Neo4j,Neo4jphp,我正在调查everyman neo4j客户() 它看起来很有前途,使用起来也很舒适。但是我对索引有点困惑。我知道在Neo4j中可以添加索引: CREATE INDEX ON :Person(name) 正如我正确回忆的那样,这将自动按名称索引所有Person节点 在everyman客户端库中,有关索引的部分显示您可以创建索引并将其添加到节点,如下所示: $shipIndex = new Everyman\Neo4j\Index\NodeIndex($client, 'ships'); (附言

我正在调查everyman neo4j客户()

它看起来很有前途,使用起来也很舒适。但是我对索引有点困惑。我知道在Neo4j中可以添加索引:

CREATE INDEX ON :Person(name)
正如我正确回忆的那样,这将自动按名称索引所有Person节点

在everyman客户端库中,有关索引的部分显示您可以创建索引并将其添加到节点,如下所示:

$shipIndex = new Everyman\Neo4j\Index\NodeIndex($client, 'ships');
(附言:上面这条线到底是做什么的?)

现在,我的问题。什么时候应该像上面的例子那样在PHP代码中手动添加索引,什么时候应该将索引添加到Neo4j数据库并依赖于自动索引? 在后一种情况下,我还可以在如下代码中使用索引搜索:

$match = $shipIndex->findOne('captain', 'Zaphod');

上述第一种方法将节点及其推进特性添加到lucene索引中。并不是说这种索引从几年前就被标记为遗留索引

模式索引现在的工作方式如下:

您可以在标签/属性组合上创建索引,例如,如果您知道必须通过用户的登录属性查找用户,通常建议添加索引以进行快速查找:

CREATE INDEX ON :User(login);
这种索引,因为neo4j 3.0也可以与
CONTAINS
子句一起使用,例如检索登录名包含
neo
字母的所有用户:

MATCH (n:User) WHERE n.login CONTAINS 'neo' RETURN n
将使用上面创建的索引进行快速检索。(注意:截至目前,包含区分大小写)

对于遗留索引和模式索引之间的完整差异解释,这里有很好的解释:

不幸的是,您提到的库不再维护,正如您从提交历史中看到的那样

Neo4j正在不断发展,特别是3.0版本现在有了一个新的二进制协议,与http相比,它提高了性能并减少了延迟

我建议您(免责声明:我是以下库的作者)使用最新的客户端,如。(请注意,它是一个纯驱动程序,不提供ogm功能,例如,您必须编写自己的密码查询)

MATCH (n:User) WHERE n.login CONTAINS 'neo' RETURN n