Neo4j php创建索引

时间:2016-05-21 11:00:49

标签: php indexing neo4j neo4jphp

我正在调查每个人的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');

1 个答案:

答案 0 :(得分:1)

上述第一种方法将节点及其推进属性添加到lucene索引中。并不是说这种索引现在被标记为遗留。

模式索引现在如下工作:

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

CREATE INDEX ON :User(login);

这种索引,因为neo4j 3.0也可以与CONTAINS子句一起使用,例如检索登录包含neo个字母的所有用户:

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

将使用上面创建的索引进行快速检索。 (nb:截至目前CONTAINS区分大小写)

对于遗留索引和架构索引之间的完全不同的解释,这里有很好的解释:Neo4j auto-index, legacy index and label schema: differences for a relative-to-a-node full-text search

不幸的是,您提到的库不再维护了,正如您在提交历史记录中看到的那样https://github.com/jadell/neo4jphp/commits/master

Neo4j正在发展很多,尤其是3.0版本现在提供了一种新的二进制协议,与http相比,它可以提高性能并减少延迟。

我会建议你(免责声明:我是以下图书馆的作者)使用像https://github.com/graphaware/neo4j-php-client这样的最新客户端。 (请注意,它是纯驱动程序,例如,它不提供ogm功能,您必须编写自己的Cypher查询)