Spec-Zone.ru › RethinkDB python

Команда ReQL: index_create

Синтаксис команды

table.index_create(index_name[, index_function][, multi=False, geo=False]) → object

Описание

Создает новый вторичный индекс в таблице. Вторичные индексы ускоряют многие запросы чтения, незначительно увеличивая занимаемое пространство и снижая производительность записи. Для получения дополнительной информации о вторичных индексах, прочитайте статью «Использование вторичных индексов в RethinkDB».

RethinkDB поддерживает различные типы вторичных индексов:

  • Простые индексы, основанные на значении одного поля.
  • Составные индексы, основанные на нескольких полях.
  • Многопольные индексы, основанные на массивах значений.
  • Географические индексы, основанные на индексах геометрических объектов, созданных, когда geo необязательный аргумент имеет значение true.
  • Индексы, основанные на произвольных выражениях.

index_function может быть анонимной функцией или двоичным представлением, полученным из поля function команды index_status. Функция должна быть детерминированной и не может использовать подзапрос или команду r.js.

При успешном выполнении create_index вернёт объект следующего вида {"created": 1}. Если индекс с таким именем уже существует в таблице, будет выброшено ReqlRuntimeError.

Обратите внимание, что индекс может не быть немедленно доступен после создания. Если вашему приложению необходимо использовать индексы сразу после создания, используйте команду index_wait, чтобы убедиться, что индексы готовы к использованию.

Пример: Создание простого индекса, основанного на поле post_id.

r.table('comments').index_create('post_id').run(conn)

Пример: Создание простого индекса, основанного на вложенном поле author > name.

r.table('comments').index_create('author_name', r.row["author"]["name"]).run(conn)

Пример: Создание географического индекса, основанного на поле location.

r.table('places').index_create('location', geo=True).run(conn)

Поле географического индекса должно содержать только геометрические объекты. Оно будет работать с геометрическими терминами ReQL (get_intersecting и get_nearest), а также со специфическими для индекса терминами (index_status, index_wait, index_drop и index_list). Использование терминов, основанных на негеометрическом порядке, таких как get_all, order_by и between, приведёт к ошибке.

Пример: Создание составного индекса, основанного на полях post_id и date.

r.table('comments').index_create('post_and_date', [r.row["post_id"], r.row["date"]]).run(conn)

Пример: Создание многопольного индекса, основанного на поле authors.

r.table('posts').index_create('authors', multi=True).run(conn)

Пример: Создание географического многопольного индекса, основанного на поле towers.

r.table('networks').index_create('towers', geo=True, multi=True).run(conn)

Пример: Создание индекса, основанного на произвольном выражении.

r.table('posts').index_create('authors', lambda doc:
    r.branch(
        doc.has_fields("updated_at"),
        doc["updated_at"],
        doc["created_at"]
    )
).run(conn)

Пример: Создание нового вторичного индекса на основе существующего.

index = r.table('posts').index_status('authors').nth(0)['function'].run(conn)
r.table('new_posts').index_create('authors', index).run(conn)

Пример: Перестроение устаревшего вторичного индекса в таблице.

old_index = r.table('posts').index_status('old_index').nth(0)['function'].run(conn)
r.table('posts').index_create('new_index', old_index).run(conn)
r.table('posts').index_wait('new_index').run(conn)
r.table('posts').index_rename('new_index', 'old_index', overwrite=True).run(conn)

Связанные команды

  • index_wait
  • index_status
  • index_list
  • index_drop

© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/index_create/

Spec-Zone.ru

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