(没有版本信息可用,可能只在 Git 中)
Collection::createIndex — 创建集合索引
在集合上创建索引。
如果已存在相同名称的索引或索引定义格式不正确,则会抛出异常。
index_name
要创建的索引的名称。此名称必须是 CREATE INDEX
SQL 查询接受的有效索引名称。
index_desc_json
要创建的索引的定义。它包含一个 IndexField 对象数组,每个对象描述一个要包含在索引中的单个文档成员,以及一个可选字符串,用于表示索引类型,可能是 INDEX(默认)或 SPATIAL。
单个 IndexField 描述包含以下字段
field
: string,要索引的文档成员或字段的完整文档路径。
type
: string,支持的 SQL 列类型之一,用于将字段映射到其中。对于数字类型,可选的 UNSIGNED 关键字可以跟在后面。对于 TEXT 类型,可以添加要考虑用于索引的长度。
required
: bool,(可选)如果字段需要存在于文档中,则为 true。默认为 **false
**,除了 GEOJSON
,它默认为 **true
**。
options
: integer,(可选)解码 GEOJSON
数据时使用的特殊选项标志。
srid
: integer,(可选)解码 GEOJSON
数据时使用的 srid 值。
在 IndexDefinition 或 IndexField 文档中包含未在上面描述的其他字段是错误的。
示例 #1 mysql_xdevapi\Collection::createIndex() 示例
<?php
$session = mysql_xdevapi\getSession("mysqlx://user:password@localhost");
$session->sql("DROP DATABASE IF EXISTS addressbook")->execute();
$session->sql("CREATE DATABASE addressbook")->execute();
$schema = $session->getSchema("addressbook");
$collection = $schema->createCollection("people");
// 创建文本索引
$collection->createIndex(
'myindex1',
'{"fields": [{
"field": "$.name",
"type": "TEXT(25)",
"required": true}],
"unique": false}'
);
// 空间索引
$collection->createIndex(
'myindex2',
'{"fields": [{
"field": "$.home",
"type": "GEOJSON",
"required": true}],
"type": "SPATIAL"}'
);
// 具有多个字段的索引
$collection->createIndex(
'myindex3',
'{"fields": [
{
"field": "$.name",
"type": "TEXT(20)",
"required": true
},
{
"field": "$.age",
"type": "INTEGER"
},
{
"field": "$.job",
"type": "TEXT(30)",
"required": false
}
],
"unique": true
}'
);