Невозможно заставить составной индекс Datastore работать из App Engine Go

У меня есть приложение Google App Engine Go, которое использует Datastore. Я пытаюсь реализовать запрос, включающий неравенства для двух свойств. Я не могу заставить работать составной индекс.

Вот схема этого вида:

type LicenseKeyUsage struct {
    First      time.Time
    Last       time.Time
    Count      int
    Days       int
}

Вот фрагмент запроса (lastMin имеет значение времени, а d — целое число):

aggregationCountQuery := datastore.NewQuery("LicenseKeyUsage").
    FilterField("Last", "> = ", lastMin).
    FilterField("Days", "> = ", d).
    NewAggregationQuery().
    WithCount("active_count")

Вот мой index.yaml, расположенный в том же каталоге, что и app.yaml:

indexes:

- kind: LicenseKeyUsage
  properties:
  - name: Last
  - name: Days

Я развертываю индексный файл с помощью команды gcloud app deploy index.yaml, затем перехожу в консоль хранилища данных и жду, пока индекс будет готов, а затем обновляю объект, который должен быть проиндексирован.

В консоли индекс не показывает никаких объектов.

Если я попытаюсь выполнить запрос, я получаю следующую ошибку:

rpc error: code = FailedPrecondition desc = The query contains range and inequality filters on multiple fields, please refer to the documentation for index selection best practices: https://cloud.google.com/datastore/docs/multiple-range-fields. One possible index to serve the query is:
- kind: LicenseKeyUsage
  properties:
  - name: Days
  - name: Last

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

Есть идеи, что здесь не так?

Можете ли вы попробовать обновить интерфейс командной строки gcloud до последней версии и повторно развернуть его. Также обязательно используйте последнюю версию Gcloud CLI. Можете ли вы попробовать развернуть с флагом --verbosity=debug и поделиться результатом. Также обратите внимание на Document1 и Document2.

Sandeep Vokkareni 06.05.2024 14:43

@SandeepVokkareni Я только что попробовал, но результат тот же. Команда gcloud выполнена успешно, поэтому команда не выдает ответа об ошибке. Консоль индекса хранилища данных показывает, что индекс создан. Похоже, он просто не собирает никаких данных об объектах. Как только я начну добавлять объекты, в столбце «записи» в индексной консоли хранилища данных должно отображаться количество объектов, верно? Просто показывает "-".

Anthony V 06.05.2024 16:03

@SandeepVokkareni Думаю, я обнаружил проблему. Я не использую базу данных по умолчанию. Когда я создаю индекс, он создается в базе данных по умолчанию. Я не могу найти в документации, как создать индекс в базе данных, отличной от базы данных по умолчанию. Знаете ли вы, как это делается или где это задокументировано?

Anthony V 06.05.2024 16:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я обнаружил причину этой проблемы. Индекс создавался для базы данных по умолчанию, но запросы были нацелены на базу данных, отличную от базы данных по умолчанию.

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

Похожие вопросы

Миграция Google App Engine на Python3 для конкретной службы
Каков правильный подход к загрузке файлов в Blobstore Google App Engine без браузера?
Рабочие Gunicorn в Google App Engine случайным образом отправляют SIGKILL, что приводит к TIMEOUT. Что происходит?
Развертывание GCP App Engine с помощью действий GitHub с использованием (предпочтительно) прямой федерации идентификации рабочей нагрузки
Обработка формы запроса POST с помощью приложения Flask и Google App Engine
Gcloud.app.deploy Ответ на ошибку: [13] Не удалось создать облачную сборку: недопустимый сегмент
Gcloud.app.deploy Ответ на ошибку: [13] учетная запись службы Cloud Build по умолчанию или указанная пользователем учетная запись службы не имеют доступа к корзине
Как мне подключиться к Google Cloud MySQL из App Engine с помощью Django-Environ?
Невозможно отправить сборки gcloud из-за ошибки разрешений tempfile file.tgz в Windows
Ошибка при развертывании приложения Java Spring Boot в Google App Engine: истекло время загрузки модуля (Ответ на ошибку: [4])