Neo4j php 创建索引
Neo4j php creating indexes
我正在研究 everyman neo4j 客户端 (https://github.com/jadell/neo4jphp/wiki)
看起来很有前途,用起来也很舒服。但是我对索引有点困惑。我知道在 Neo4j 中你可以添加一个索引:
CREATE INDEX ON :Person(name)
我没记错的话,这会自动按名称索引所有 Person 节点。
在 everyman 客户端库中,索引部分显示您可以像这样创建索引并将其添加到节点:
$shipIndex = new Everyman\Neo4j\Index\NodeIndex($client, 'ships');
(PS: 上面这行到底是做什么的?)
$heartOfGold = $client->makeNode()
->setProperty('propulsion', 'infinite improbability drive')
->save();
// Index the ship on one of its properties
$shipIndex->add($heartOfGold, 'propulsion', $heartOfGold->getProperty('propulsion'));
现在,我的问题。我什么时候应该像上面的例子那样在我的 PHP 代码中手动添加索引,什么时候应该将索引添加到我的 Neo4j 数据库并依赖自动索引?
在后一种情况下,我还可以在这样的代码中使用索引搜索吗:
$match = $shipIndex->findOne('captain', 'Zaphod');
?
上述第一种方法将节点及其推进器 属性 添加到 lucene 索引中。并不是说这种索引已经有几次被标记为遗留了。
模式索引现在按如下方式工作:
您在 label/property 组合上创建索引,例如,如果您知道必须通过登录名 属性 查找用户,通常建议添加索引以进行快速查找:
CREATE INDEX ON :User(login);
这种索引,因为 neo4j 3.0 也可以与 CONTAINS
子句一起使用,例如检索所有登录包含 neo
字母的用户:
MATCH (n:User) WHERE n.login CONTAINS 'neo' RETURN n
将使用上面创建的索引进行快速检索。 (注意:截至目前,CONTAINS 区分大小写)
对于遗留索引和模式索引之间的完整区别解释,这里解释得很好:
很遗憾,您提到的库已不再维护,您可以从提交历史记录中看到 https://github.com/jadell/neo4jphp/commits/master
Neo4j 正在不断发展,尤其是 3.0 版本现在有一个新的二进制协议可用,与 http 相比,它提高了性能并减少了延迟。
我建议您(免责声明:我是以下库的作者)使用像 https://github.com/graphaware/neo4j-php-client 这样的最新客户端。 (请注意,它是一个纯驱动程序,它不提供 ogm 功能,例如,您必须编写自己的 Cypher 查询)
我正在研究 everyman neo4j 客户端 (https://github.com/jadell/neo4jphp/wiki)
看起来很有前途,用起来也很舒服。但是我对索引有点困惑。我知道在 Neo4j 中你可以添加一个索引:
CREATE INDEX ON :Person(name)
我没记错的话,这会自动按名称索引所有 Person 节点。
在 everyman 客户端库中,索引部分显示您可以像这样创建索引并将其添加到节点:
$shipIndex = new Everyman\Neo4j\Index\NodeIndex($client, 'ships');
(PS: 上面这行到底是做什么的?)
$heartOfGold = $client->makeNode()
->setProperty('propulsion', 'infinite improbability drive')
->save();
// Index the ship on one of its properties
$shipIndex->add($heartOfGold, 'propulsion', $heartOfGold->getProperty('propulsion'));
现在,我的问题。我什么时候应该像上面的例子那样在我的 PHP 代码中手动添加索引,什么时候应该将索引添加到我的 Neo4j 数据库并依赖自动索引? 在后一种情况下,我还可以在这样的代码中使用索引搜索吗:
$match = $shipIndex->findOne('captain', 'Zaphod');
?
上述第一种方法将节点及其推进器 属性 添加到 lucene 索引中。并不是说这种索引已经有几次被标记为遗留了。
模式索引现在按如下方式工作:
您在 label/property 组合上创建索引,例如,如果您知道必须通过登录名 属性 查找用户,通常建议添加索引以进行快速查找:
CREATE INDEX ON :User(login);
这种索引,因为 neo4j 3.0 也可以与 CONTAINS
子句一起使用,例如检索所有登录包含 neo
字母的用户:
MATCH (n:User) WHERE n.login CONTAINS 'neo' RETURN n
将使用上面创建的索引进行快速检索。 (注意:截至目前,CONTAINS 区分大小写)
对于遗留索引和模式索引之间的完整区别解释,这里解释得很好:
很遗憾,您提到的库已不再维护,您可以从提交历史记录中看到 https://github.com/jadell/neo4jphp/commits/master
Neo4j 正在不断发展,尤其是 3.0 版本现在有一个新的二进制协议可用,与 http 相比,它提高了性能并减少了延迟。
我建议您(免责声明:我是以下库的作者)使用像 https://github.com/graphaware/neo4j-php-client 这样的最新客户端。 (请注意,它是一个纯驱动程序,它不提供 ogm 功能,例如,您必须编写自己的 Cypher 查询)