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

Имя индекса, который нужно создать. Должно быть корректным именем индекса, допустимым для SQL-запроса CREATE INDEX.

index_desc_json

Определение индекса для создания. Содержит массив объектов IndexField, и каждый объект описывает один элемент документа для добавления в индекс, а также необязательную строку для типа индекса, который может быть INDEX (по умолчанию) или SPATIAL.

Одно описание IndexField состоит из следующих полей:

  • field: строка, полный путь документа к элементу документа или полю для индексации.

  • type: строка, один из поддерживаемых типов столбцов SQL для сопоставления поля. Для числовых типов может быть добавлено необязательное ключевое слово UNSIGNED. Для типа TEXT может быть добавлена длина, учитываемая для индексации.

  • required: булево, (необязательное) true, если поле должно быть обязательным в документе. По умолчанию используется значение FALSE, за исключением типа GEOJSON, где по умолчанию используется значение TRUE.

  • options: целое число, (необязательное) флаги специальных опций для использования при декодировании данных GEOJSON.

  • srid: целое число, (необязательное) значение srid для использования при декодировании данных GEOJSON.

Ошибочно включать другие поля, не описанные выше, в документы 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
  }'
);