Сложный запрос Firestore flutter

# #flutter #google-cloud-firestore

Вопрос:

Я хочу выполнить поиск в своем приложении flutter, и запрос, который я использую, выглядит следующим образом:

 searchUser = FirebaseFirestore.instance
            .collection('User')
            .where("name", isGreaterThanOrEqualTo: mySearchController.text)
            .where("name", isLessThan: limit);
 

Теперь это дает мне результат, но он показывает все документы, и теперь я хочу выполнить еще 1 «где», как это:

 .where("friends", arrayContains: globals.patientPhoneNum)
 

Итак, мой последний запрос выглядит так:

 searchUser = FirebaseFirestore.instance
            .collection('User')
            .where("friends", arrayContains: globals.patientPhoneNum)
            .where("name", isGreaterThanOrEqualTo: mySearchController.text)
            .where("name", isLessThan: limit);
 

Но теперь это приводит меня к ошибке:

 (22.1.2) [Firestore]: Listen for Query(target=Query(User where friends array_contains # com.google.firestore.v1.Value@ff357562
W/Firestore(16941): integer_value: 0
W/Firestore(16941): string_value: " 919869787899" and name >= # com.google.firestore.v1.Value@9deca
W/Firestore(16941): integer_value: 0
W/Firestore(16941): string_value: "Ra" and name < # com.google.firestore.v1.Value@9deff
W/Firestore(16941): integer_value: 0
W/Firestore(16941): string_value: "Rb" order by name, __name__);limitType=LIMIT_TO_FIRST) failed: Status{code=FAILED_PRECONDITION, description=The query requires an index. You can create it here: https://console.firebase.google.com/v1/r/project/acm2021-1d053/firestore/indexes?create_composite=Ckpwcm9qZWN0cy9hY20yMDIxLTFkMDUzL2RhdGFiYXNlcy8oZGVmYXVsdCkvY29sbGVjdGlvbkdyb3Vwcy9Vc2VyL2luZGV4ZXMvXxABGgsKB2ZyaWVuZHMYARoICgRuYW1lEAEaDAoIX19uYW1lX18QAQ, cause=null}
 

Огненный магазин:

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

Комментарии:

1. Сообщение об ошибке буквально не могло быть более информативным. Вы должны создать индекс. Вы можете создать его там: консоль. firebase.google.com/v1/r/project/acm2021-1d053/…

2. Большое спасибо, чувак

Ответ №1:

Вы должны следовать инструкциям, данным Firebase

  1. Откройте ссылку, которая появится в командной строке(это)
  2. Нажмите на кнопку Создать индекс(синяя кнопка в правом нижнем углу).
  3. Подождите, пока статус запроса на индексирование не изменится с Building на Enabled (этот шаг может занять 4-5 минут).
  4. Теперь запрос должен работать нормально

Комментарии:

1. Спасибо вам 🙂 Я новичок и понятия не имел об этом, ценю это