Как использовать свойства проекции вместе с фильтром равенства в 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 для запроса содержимого вашего хранилища данных:

Имейте в виду, что для определения индексов рекомендуются некоторые лучшие практики, и самый важный, который вы должны учитывать (для того, чтобы выполнить оптимальный запрос):

Идеальный индекс для запроса, который позволяет наиболее эффективно выполнять запрос, определяется в следующих свойствах по порядку:

  1. Свойства, используемые в фильтрах равенства
  2. Свойство, используемое в фильтре неравенства
  3. Свойства, используемые в порядках сортировки

Поэтому убедитесь, что ваша конфигурация индекса похожа на ту, которую я опубликовал, и что она правильно загружена в ваш проект.

Наконец, существуют некоторые ограничения для проекционных запросов в Datastore, но ваш запрос, похоже, не выпадает ни на один из них, так что в этом случае это не должно быть проблемой.

Другие вопросы по тегам