(沒有版本資訊,可能只在 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
}'
);