【问题标题】:Neo4j php creating indexesNeo4j php 创建索引
【发布时间】:2016-05-21 11:00:48
【问题描述】:

我正在调查普通的 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');

?

【问题讨论】:

    标签: php indexing neo4j neo4jphp


    【解决方案1】:

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

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

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

    CREATE INDEX ON :User(login);
    

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

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

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

    对于 legacy 和 schema 索引之间的完整差异解释,这里有很好的解释: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 查询)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 2022-01-15
      • 1970-01-01
      相关资源
      最近更新 更多