Составной фильтр хранилища данных GAE не работает - PullRequest
0 голосов
/ 13 мая 2019

Я создаю составной фильтр, у него есть оператор ИЛИ, а затем оператор И, когда я устанавливаю порядок сортировки для этого запроса, который не дает правильного результата.

запрос, который я пытаюсь выполнить: {status == Инициировано ИЛИ (Status == Failed AND failedCount <= 5)}.он фактически выполняет запрос без какой-либо ошибки, но результат не совсем правильный.он извлекает только «status == failed & failedCount <= 5», а не статус == инициирован.и порядок, в котором я нуждаюсь, - это поле «createAt». </p>

Filter initiatedFilter = new FilterPredicate("status", FilterOperator.EQUAL, "Initiated");

Filter failedFilter = new FilterPredicate("status", FilterOperator.EQUAL, "Failed");

Filter failedCountFilter = new FilterPredicate("failedCount", FilterOperator.LESS_THAN_OR_EQUAL, 5);

CompositeFilter failedCompositeFilter = CompositeFilterOperator.and(failedFilter, failedCountFilter);

CompositeFilter initaiedFailedFilter = CompositeFilterOperator.or(initiatedFilter, failedCompositeFilter);

Query query2 = new Query("JobInstance").setFilter(initaiedFailedFilter).addSort("failedCount", SortDirection.ASCENDING).addSort("createdAt", SortDirection.ASCENDING);

jobEntitesList = datastoreService.prepare(query2).asList(FetchOptions.Builder.withLimit(limit));

for (Entity jobEntity2 : jobEntitesList) {
    /* doing some task */
}

Что я наблюдал, так это удаление addSort ().но для меня сортировка важна.Я хочу, чтобы результат был в порядке «создан при».Если я удаляю failCount, он выдаёт какую-то ошибку.

1 Ответ

1 голос
/ 14 мая 2019

Или фильтры полностью реализованы в клиенте (например, фильтры запросов IN: https://cloud.google.com/appengine/docs/standard/java/datastore/queries#filters).). Таким образом, ваш тип сортировки происходит в клиенте. Вероятно, вы получаете все результаты запроса status == Failed AND FailedCount <= 5 до получения любые результаты от status == Initiated.

Из вашего комментария неясно, какой порядок вы ищете. Как указано в Ограничениях на запросы , основной порядок сортировки должен быть на failCount, поскольку он имеет фильтр неравенства.

...