Каждому запросу к данным хранилища, выполняемому приложением, должен быть сопоставлен соответствующий индекс. Для простых запросов, таких как загрузки объектов с фильтром по единственному свойству, индексы создаются платформой автоматически. Индексы для комплексных запросов должны быть определены в конфигурационном файле index.yaml. Его загрузка на сервер и создание соответствующих индексов происходит одновременно с публикацией приложения.
Сервер разработки (dev_appserver.py) автоматически производит добавление новых определений индексов в том случае, если приложение пытается выполнить запрос, требующий для своей работы соответствующий индекс. Вы можете изменить эти определения или добавить новые с путем редактирования этого файла.
Подсказка: Если вы проводите тестирование каждого заданного в приложении запроса с использованием сервера разработки, то все соответствующие индексы будут автоматически определены в файле index.yaml. Вам необходимо будет добавить только те индексы, какие не попали под запросы выполняемые приложением, работающем под управлением среды разработки.
Для дополнительной информации о индексах, смотрите раздел Запросы и индексы.
Далее следует пример файла index.yaml:
indexes:
- kind: Cat
ancestor: no
properties:
- name: name
- name: age
direction: desc
- kind: Cat
properties:
- name: name
direction: asc
- name: whiskers
direction: desc
- kind: Store
ancestor: yes
properties:
- name: business
direction: asc
- name: owner
direction: asc
Данные в файле index.yaml указываются в формате разметки YAML. Для дополнительной информации об этом языке посетите сайт YAML.
Подсказка: Язык разметки YAML поддерживает использование комментариев. Все строки, начинающиеся с символа # будут проигнорированы:# Это комментарий.
Файл index.yaml имеет единственный элемент списка с именем indexes. Каждый элемент этого списка соответствует одному индексу определенному для приложения.
Каждая запись об индексе имеет следующие элементы:
kindТип объекта в запросе. Обычно является именем класса-наследника класса Model, определяющего модель для объектов. Этот элемент является обязательным.
propertiesСписок свойств, включаемый в столбцы таблицы индекса в порядке: сначала свойства, используемые в условиях равенств, затем в неравенствах, после чего указываемые в порядке сортировок результирующих выборок и задание их направлений.
Каждый элемент этого списка имеет следующих членов:
nameИмя свойства.
directionНаправление сортировки, может быть либо asc для задания по возрастанию или desc - по убыванию. Требуется только для свойств, указываемых в порядке сортировки запроса и должно совпадать с соответствующим направлением. По умолчанию считается, что указано asc.
ancestorЗначение yes, если запрос содержит условие совпадения по предку объекта (задан с помощью метода Query.ancestor() или выражения языка GQL ANCESTOR IS). По умолчанию no.
Когда сервер разработки добавляет определение новых индексов в файл index.yaml, он помещает их ниже следующей строки, создавая ее при необходимости:
# AUTOGENERATED
Сервер разработки считает, что все определения индексов ниже этой строки были сгенерированы автоматически и может вносить в них свои изменения при выполнении приложением запросов.
Все определения, содержащиеся до этой строки, считаются заданными разработчиком вручную и их изменения системой не производятся. Сервер разработки выполняет все изменения в строках ниже этой и делает это только в том случае, если весь файл index.yaml не содержит определения индекса, требуемого для выполнения запроса приложением. Для того, чтобы взять под свой контроль автоматическое определение индексов, переместите их выше этой строки.