Команда 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)
© RethinkDB contributors
Licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
https://rethinkdb.com/api/python/index_create/