Как использовать свойства проекции вместе с фильтром равенства в GQuery?
Мой gquery выглядит примерно так:
SELECT Distinct Path,Value FROM Entity WHERE PID="chichi"
Я получаю ошибку как
GQL query error: Your Datastore does not have the composite index (developer-supplied) required for this query.
Я знаю, что я использую проекции с запросом равенства, я добавил путь, значение и идентификатор плана в index.yaml(файл составного индекса). Как выполнить этот запрос в хранилище данных gcloud?
Я включил все возможные комбинации в файл index.yaml
index.yaml:
indexes:
- kind: Entity
properties:
- name: PID
- name: Value
- name: Path
1 ответ
Я смог воспроизвести вашу ошибку, создав набор сущностей с указанными вами свойствами. Как вы указали, чтобы избавиться от ошибки, мне нужно было создать индекс. Запросы, которые работают с несколькими свойствами одновременно, не определяются автоматически как индекс, поэтому их необходимо индексировать вручную. Индексы определены в index.yaml
файл, который должен выглядеть примерно так:
indexes:
- kind: Entity
properties:
- name: PID
- name: Path
- name: Value
Конечно, он может содержать больше индексов, если вы используете любой другой другой. Как только у вас есть это index.yaml
файл создан, вы можете загрузить его в свой проект с помощью следующей команды:
gcloud datastore create-indexes index.yaml
Загрузка займет некоторое время, но как только он будет готов, вы сможете найти его на вкладке Datastore > Indexes в консоли:
Как только зеленая галочка будет показана, индекс будет готов к работе, и вы можете использовать GQL для запроса содержимого вашего хранилища данных:
Имейте в виду, что для определения индексов рекомендуются некоторые лучшие практики, и самый важный, который вы должны учитывать (для того, чтобы выполнить оптимальный запрос):
Идеальный индекс для запроса, который позволяет наиболее эффективно выполнять запрос, определяется в следующих свойствах по порядку:
- Свойства, используемые в фильтрах равенства
- Свойство, используемое в фильтре неравенства
- Свойства, используемые в порядках сортировки
Поэтому убедитесь, что ваша конфигурация индекса похожа на ту, которую я опубликовал, и что она правильно загружена в ваш проект.
Наконец, существуют некоторые ограничения для проекционных запросов в Datastore, но ваш запрос, похоже, не выпадает ни на один из них, так что в этом случае это не должно быть проблемой.