PHP Conference China 2020

Collection::createIndex

(No version information available, might only be in Git)

Collection::createIndexコレクションにインデックスを作成

説明

public mysql_xdevapi\Collection::createIndex ( string $index_name , string $index_desc_json ) : void

コレクションにインデックスを作成します。

指定された名前と同じインデックスが既に存在していた場合、 もしくはインデックスの定義が正しくなかった場合は、 例外が投げられます。

パラメータ

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
  }'
);
add a note add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top