(无版本信息可用,可能仅在 Git 中)
Collection::createIndex — 创建集合索引
在集合上创建索引。
如果已存在同名索引,或者索引定义格式不正确,则会抛出异常。
index_name
要创建的索引名称。此名称必须是 CREATE INDEX
SQL 查询接受的有效索引名称。
index_desc_json
要创建的索引定义。它包含一个 IndexField 对象数组,每个对象描述要包含在索引中的单个文档成员,以及可选的索引类型字符串,可能是 INDEX(默认)或 SPATIAL。
单个 IndexField 描述包含以下字段
field
:字符串,要索引的文档成员或字段的完整文档路径。
type
:字符串,支持的 SQL 列类型之一,用于将字段映射到该类型。对于数字类型,可选的 UNSIGNED 关键字可以放在后面。对于 TEXT 类型,可以添加要考虑进行索引的长度。
required
:布尔值,(可选)如果字段必须存在于文档中,则为 true。默认为 false
,除了 GEOJSON
,它默认为 true
。
options
:整数,(可选)解码 GEOJSON
数据时使用的特殊选项标志。
srid
:整数,(可选)解码 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
}'
);