You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GraphAware Neo4j OGM注解从元数据创建索引?

使用GraphAware Neo4j OGM通过元数据创建索引

好问题!在GraphAware Neo4j OGM中,你完全可以通过实体类上的注解来定义索引,无需手动编写Cypher语句。针对你的需求,我分场景给你说明具体实现方式:

1. 定义复合索引(对应你需要的CREATE INDEX ON :Contact(firstname, email))

如果你要创建多属性的复合索引,直接在节点类上添加@OGM\CompositeIndex注解,指定要包含的字段名即可:

use GraphAware\Neo4j\OGM\Annotations as OGM;

/**
 * @OGM\Node(label="Contact")
 * @OGM\CompositeIndex(columns={"firstname", "email"})
 */
class Contact
{
    /**
     * @OGM\Property(type="string")
     */
    private $firstname;

    /**
     * @OGM\Property(type="string")
     */
    private $email;

    // 其他属性、构造方法及getter/setter...
}

2. 单属性索引

如果只是单个字段需要索引,直接在对应属性上添加@OGM\Index注解:

/**
 * @OGM\Property(type="string")
 * @OGM\Index()
 */
private $firstname;

3. 唯一索引(可选)

如果需要保证字段唯一性(比如邮箱不能重复),可以用@OGM\UniqueIndex定义单属性唯一索引,或者在复合索引里加上unique=true:

// 单属性唯一索引
/**
 * @OGM\Property(type="string")
 * @OGM\UniqueIndex()
 */
private $email;

// 复合唯一索引
/**
 * @OGM\Node(label="Contact")
 * @OGM\CompositeIndex(columns={"firstname", "email"}, unique=true)
 */
class Contact
{
    // ...
}

4. 让OGM自动创建索引

定义好注解后,需要在初始化EntityManager时开启自动索引同步功能,设置schemaAction参数为CREATE或UPDATE:

use GraphAware\Neo4j\OGM\EntityManager;
use GraphAware\Neo4j\OGM\Configuration;

$config = Configuration::create()
    ->setSchemaAction('CREATE'); // CREATE会创建所有缺失的索引/约束;UPDATE会创建+更新已有索引

// 传入Neo4j连接地址、配置、实体类所在目录
$em = EntityManager::create('bolt://localhost:7687', $config, [__DIR__.'/path/to/your/entities']);

当EntityManager初始化后,OGM会自动执行对应的Cypher语句,帮你创建好所有定义的索引,完全不需要手动执行CREATE INDEX命令。

内容的提问来源于stack exchange,提问作者Jaime Roman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:50:58