(No version information available, might only be in Git)
Collection::createIndex — コレクションにインデックスを作成
コレクションにインデックスを作成します。
指定された名前と同じインデックスが既に存在していた場合、 もしくはインデックスの定義が正しくなかった場合は、 例外がスローされます。
index_name
作成するインデックスの名前。
この名前は、 CREATE INDEX
SQLクエリが受け入れられる、
正しいものでなければなりません。
index_desc_json
作成するインデックスの定義。 IndexField オブジェクトの配列を含み、 個々のオブジェクトはインデックスに含まれる単一のドキュメントを記述します。 そして、オプションで、インデックスのタイプを示すオプションの文字列を含めます。 インデックスのタイプは、INDEX(デフォルト) または SPATIAL です。
IndexField の記述は、以下のフィールドを含みます:
field
: 文字列。インデックスされるドキュメンメンバまたはフィールドの完全なパス
type
: 文字列。フィールドにマップされる、サポートされたSQLカラムの型のうちひとつ。
数値型のために、オプションで UNSIGNED を後ろに続けることができます。
テキスト型のために、インデックスのために考慮する長さを追加できます。
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");
// text index を作る
$collection->createIndex(
'myindex1',
'{"fields": [{
"field": "$.name",
"type": "TEXT(25)",
"required": true}],
"unique": false}'
);
// spatial インデックスを作る
$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
}'
);