Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Руководство [8.17] ›REST API ›API индексов

API создания индекса

Справочник по новым API

Для получения самых последних данных об API обратитесь к API индексов.

Создаёт новый индекс.

resp = client.indices.create(
    index="my-index-000001",
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001'
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
});
console.log(response);
PUT /my-index-000001

Запрос

PUT /<index>

Предварительные условия

  • Если включены функции безопасности Elasticsearch, у вас должна быть create_index или manage разрешение на индекс для целевого индекса. Для добавления индекса в псевдоним, у вас должно быть manage разрешение на индекс для псевдонима.

Описание

Вы можете использовать API создания индекса, чтобы добавить новый индекс в кластер Elasticsearch. При создании индекса вы можете указать следующее:

  • Параметры настройки индекса
  • Сопоставления для полей в индексе
  • Псевдонимы индексов

Параметры пути

<index>

(Обязательно, строка) Имя индекса, который вы хотите создать.

Имена индексов должны соответствовать следующим критериям:

  • Только строчные буквы
  • Не могут содержать \, /, *, ?, ", <, >, |, пробел, ,, #
  • Индексы до версии 7.0 могли содержать двоеточие (:), но эта возможность устарела и не будет поддерживаться в версии 7.0 и выше
  • Не могут начинаться с -, _, +
  • Не могут быть . или ..
  • Не могут быть длиннее 255 байт (имеется в виду количество байт, поэтому символы с множеством байт быстрее достигнут предела 255)
  • Имена, начинающиеся с ., устарели, за исключением скрытых индексов и внутренних индексов, управляемых плагинами

Параметры запроса

wait_for_active_shards

(Необязательно, строка) Количество активных копий каждого фрагмента, необходимых для выполнения операции. Установите значение all или любое неотрицательное целое число до общего количества копий каждого фрагмента в индексе (number_of_replicas+1). По умолчанию равно 1, что означает ожидание активации только каждого первичного фрагмента.

См. Активные фрагменты.

master_timeout
(Необязательно, единицы измерения времени) Время ожидания главного узла. Если главный узел недоступен до истечения срока ожидания, запрос завершается ошибкой. По умолчанию равно 30s. Также может быть установлено значение -1, чтобы указать, что запрос никогда не должен истекать.
timeout
(Необязательно, единицы измерения времени) Время ожидания ответа от всех соответствующих узлов в кластере после обновления метаданных кластера. Если ответ не получен до истечения срока ожидания, обновление метаданных кластера всё равно применяется, но ответ укажет, что он не был полностью подтверждён. По умолчанию равно 30s. Также может быть установлено значение -1, чтобы указать, что запрос никогда не должен истекать.

Тело запроса

aliases

(Необязательно, объект объектов) Псевдонимы для индекса.

Свойства объектов aliases
<alias>

(Обязательно, объект) Ключ — имя псевдонима. Имена псевдонимов индексов поддерживают поддержку даты и времени.

Тело объекта содержит параметры для псевдонима. Поддерживает пустой объект.

Свойства объектов <alias>
filter
(Необязательно, объект языка запросов) Запрос, используемый для ограничения документов, к которым может получить доступ псевдоним.
index_routing
(Необязательно, строка) Значение, используемое для маршрутизации операций индексирования на определённый фрагмент. Если указано, это значение переписывает routing значение для операций индексирования.
is_hidden
(Необязательно, Boolean) Если true, псевдоним является скрытым. По умолчанию false. Все индексы для псевдонима должны иметь одинаковое is_hidden значение.
is_write_index
(Необязательно, Boolean) Если true, индекс является индексом записи для псевдонима. По умолчанию false.
routing
(Необязательно, строка) Значение, используемое для маршрутизации операций индексирования и поиска на определённый фрагмент.
search_routing
(Необязательно, строка) Значение, используемое для маршрутизации операций поиска на определённый фрагмент. Если указано, это значение переписывает routing значение для операций поиска.
mappings

(Необязательно, объект сопоставления) Сопоставление для полей в индексе. Если указано, это сопоставление может включать:

  • Имена полей
  • Типы данных полей
  • Параметры сопоставления

См. Сопоставление.

settings
(Необязательно, объект настроек индекса) Параметры конфигурации индекса. См. Настройки индекса.

Примеры

Настройки индекса

Каждый созданный индекс может иметь специфические настройки, определённые в теле:

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "index": {
            "number_of_shards": 3,
            "number_of_replicas": 2
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      index: {
        number_of_shards: 3,
        number_of_replicas: 2
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    index: {
      number_of_shards: 3,
      number_of_replicas: 2,
    },
  },
});
console.log(response);
PUT /my-index-000001
{
  "settings": {
    "index": {
      "number_of_shards": 3,  
      "number_of_replicas": 2 
    }
  }
}

По умолчанию для number_of_shards значение равно 1

По умолчанию для number_of_replicas значение равно 1 (т.е. одна реплики для каждого первичного фрагмента)

или более упрощённо

resp = client.indices.create(
    index="my-index-000001",
    settings={
        "number_of_shards": 3,
        "number_of_replicas": 2
    },
)
print(resp)
response = client.indices.create(
  index: 'my-index-000001',
  body: {
    settings: {
      number_of_shards: 3,
      number_of_replicas: 2
    }
  }
)
puts response
const response = await client.indices.create({
  index: "my-index-000001",
  settings: {
    number_of_shards: 3,
    number_of_replicas: 2,
  },
});
console.log(response);
PUT /my-index-000001
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

Вам не нужно явно указывать раздел index внутри раздела settings.

Для получения более подробной информации о различных настройках уровня индекса, которые можно установить при создании индекса, пожалуйста, обратитесь к разделу модулей индекса.

Сопоставления

API создания индекса позволяет предоставить определение сопоставления:

resp = client.indices.create(
    index="test",
    settings={
        "number_of_shards": 1
    },
    mappings={
        "properties": {
            "field1": {
                "type": "text"
            }
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'test',
  body: {
    settings: {
      number_of_shards: 1
    },
    mappings: {
      properties: {
        "field1": {
          type: 'text'
        }
      }
    }
  }
)
puts response
res, err := es.Indices.Create(
	"test",
	es.Indices.Create.WithBody(strings.NewReader(`{
	  "settings": {
	    "number_of_shards": 1
	  },
	  "mappings": {
	    "properties": {
	      "field1": {
	        "type": "text"
	      }
	    }
	  }
	}`)),
)
fmt.Println(res, err)
const response = await client.indices.create({
  index: "test",
  settings: {
    number_of_shards: 1,
  },
  mappings: {
    properties: {
      field1: {
        type: "text",
      },
    },
  },
});
console.log(response);
PUT /test
{
  "settings": {
    "number_of_shards": 1
  },
  "mappings": {
    "properties": {
      "field1": { "type": "text" }
    }
  }
}

Псевдонимы

API создания индекса также позволяет предоставить набор псевдонимов:

resp = client.indices.create(
    index="test",
    aliases={
        "alias_1": {},
        "alias_2": {
            "filter": {
                "term": {
                    "user.id": "kimchy"
                }
            },
            "routing": "shard-1"
        }
    },
)
print(resp)
response = client.indices.create(
  index: 'test',
  body: {
    aliases: {
      "alias_1": {},
      "alias_2": {
        filter: {
          term: {
            'user.id' => 'kimchy'
          }
        },
        routing: 'shard-1'
      }
    }
  }
)
puts response
const response = await client.indices.create({
  index: "test",
  aliases: {
    alias_1: {},
    alias_2: {
      filter: {
        term: {
          "user.id": "kimchy",
        },
      },
      routing: "shard-1",
    },
  },
});
console.log(response);
PUT /test
{
  "aliases": {
    "alias_1": {},
    "alias_2": {
      "filter": {
        "term": { "user.id": "kimchy" }
      },
      "routing": "shard-1"
    }
  }
}

Имена псевдонимов индексов также поддерживают математику дат.

resp = client.indices.create(
    index="logs",
    aliases={
        "<logs_{now/M}>": {}
    },
)
print(resp)
response = client.indices.create(
  index: 'logs',
  body: {
    aliases: {
      "<logs_{now/M}>": {}
    }
  }
)
puts response
const response = await client.indices.create({
  index: "logs",
  aliases: {
    "<logs_{now/M}>": {},
  },
});
console.log(response);
PUT /logs
{
  "aliases": {
    "<logs_{now/M}>": {}
  }
}

Ожидание активных фрагментов

По умолчанию, создание индекса вернёт ответ клиенту, только когда будут запущены первичные копии каждого фрагмента, или запросы истекут. Ответ на создание индекса укажет, что произошло:

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "index": "logs"
}

acknowledged указывает, был ли индекс успешно создан в кластере, в то время как shards_acknowledged указывает, было ли начато необходимое количество копий фрагментов для каждого фрагмента в индексе до истечения времени ожидания. Обратите внимание, что всё ещё возможно, что либо acknowledged, либо shards_acknowledged будет равно false, но создание индекса прошло успешно. Эти значения просто указывают, завершилась ли операция до истечения срока ожидания. Если acknowledged равно false, значит, мы превысили время ожидания до того, как состояние кластера было обновлено с новым созданным индексом, но он, вероятно, будет создан в ближайшее время. Если shards_acknowledged равно false, значит, мы превысили время ожидания до запуска необходимого количества фрагментов (по умолчанию только первичных), даже если состояние кластера было успешно обновлено, чтобы отразить вновь созданный индекс (т.е. acknowledged=true).

Мы можем изменить значение по умолчанию, ожидая только запуска первичных фрагментов, используя настройку индекса index.write.wait_for_active_shards (обратите внимание, что изменение этой настройки также повлияет на значение wait_for_active_shards во всех последующих операциях записи):

resp = client.indices.create(
    index="test",
    settings={
        "index.write.wait_for_active_shards": "2"
    },
)
print(resp)
response = client.indices.create(
  index: 'test',
  body: {
    settings: {
      'index.write.wait_for_active_shards' => '2'
    }
  }
)
puts response
res, err := es.Indices.Create(
	"test",
	es.Indices.Create.WithBody(strings.NewReader(`{
	  "settings": {
	    "index.write.wait_for_active_shards": "2"
	  }
	}`)),
)
fmt.Println(res, err)
const response = await client.indices.create({
  index: "test",
  settings: {
    "index.write.wait_for_active_shards": "2",
  },
});
console.log(response);
PUT /test
{
  "settings": {
    "index.write.wait_for_active_shards": "2"
  }
}

или через параметр запроса wait_for_active_shards:

$params = [
    'index' => 'test',
];
$response = $client->indices()->create($params);
resp = client.indices.create(
    index="test",
    wait_for_active_shards="2",
)
print(resp)
response = client.indices.create(
  index: 'test',
  wait_for_active_shards: 2
)
puts response
res, err := es.Indices.Create("test?wait_for_active_shards=2")
fmt.Println(res, err)
const response = await client.indices.create({
  index: "test",
  wait_for_active_shards: 2,
});
console.log(response);
PUT /test?wait_for_active_shards=2

Подробное объяснение wait_for_active_shards и его возможных значений можно найти здесь.

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/indices-create-index.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API