Как использовать свойства проекции вместе с фильтром равенства в 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

person mohd.gadi    schedule 02.02.2018    source источник
comment
Порядок свойств действительно важен, вот что вызывало ошибку   -  person mohd.gadi    schedule 02.02.2018


Ответы (1)


Я смог воспроизвести вашу ошибку самостоятельно, создав набор сущностей с указанными вами свойствами. Чтобы избавиться от ошибки, как вы указали, мне пришлось создать индекс . Запросы, которые работают с несколькими свойствами одновременно, не определяются автоматически как индекс, поэтому их необходимо индексировать вручную. Индексы определены в файле index.yaml, который должен выглядеть примерно так:

indexes:
- kind: Entity
  properties:
  - name: PID
  - name: Path
  - name: Value

Конечно, он может содержать больше индексов, если вы используете любой другой. Создав этот index.yaml файл, вы можете загрузить его в свой проект с помощью следующая команда:

gcloud datastore create-indexes index.yaml

Загрузка займет некоторое время, но как только он будет готов, вы сможете найти его в Хранилище данных › Вкладка «Индексы» в консоли:

введите здесь описание изображения

Как только появится зеленая галочка, индекс будет готов к работе, и вы сможете использовать GQL для запроса содержимого вашего хранилища данных:

введите здесь описание изображения

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

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

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

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

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

person dsesto    schedule 02.02.2018
comment
Хорошо, у меня уже было 3 свойства в качестве индексов раньше, но почему это не работает, потому что это был порядок свойств. - person mohd.gadi; 02.02.2018
comment
Порядок действительно важен, поскольку, как указано в документации, строки индекса сортируются по предку, а затем по значениям свойств в том же порядке, который указан в определении индекса. Таким образом, порядок свойств в индексе имеет значение. - person dsesto; 02.02.2018