Могу ли я отфильтровать несколько полей в поиске Firestore? - PullRequest
0 голосов
/ 11 сентября 2018

Я использую базу данных Firestore в своем приложении.
Теперь можно ли искать определенное слово в нескольких полях?

Например: представьте себе слово типа "cheesecake" .Теперь у меня есть 100 документов в коллекции, и у каждого документа есть 10 разных полей.
Можно ли отфильтровать по слову в все поля , чтобы он возвращал любой документ, которыйсодержит слово "чизкейк" в любое из полей , в флаттере?

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Как объяснил creativecreatorormaybenot, не существует простого решения для ваших требований. Фильтрация на стороне клиента может занять очень много времени и денег, в зависимости от размера вашей базы данных.

Существует еще одна возможность, которая будет включать полнотекстовый поиск в документах Cloud Firestore с помощью службы поиска, размещаемой в Algolia. Существует официальный пример функции облака, который показывает, как это настроить: https://github.com/firebase/functions-samples/tree/Node-8/fulltext-search-firestore

0 голосов
/ 11 сентября 2018

Нет , вы не можете сделать это .
Глядя на страницу документации Firebase Firestore о запросах , вы узнаете о следующем:

Cloud Firestore не поддерживает следующие типы запросов:

Это не относится напрямую к вашему конкретному варианту использования, но причины, по которым ваш запрос не будет работать, аналогичны: нет индекса, который позволял бы сортировать по нескольким различным полям.
Вы могли бы, например, создавать индексы, которые сортируют каждое из полей, но запрашивают их только по отдельности. Чтобы понять, почему некоторые запросы не поддерживаются, вы можете проверить это подробное пояснительное видео от команды Firebase .

В заключение, это означает, что вам нужно будет выполнить фильтрацию на стороне клиента.

Концепция обхода во флаттере

final QuerySnapshot querySnapshot = 
  await Firestore.instance.collection('cakes').getDocuments();
final List<DocumentSnapshot> documents = 
  querySnapshot.documents.where((snapshot) => snapshot.data.containsValue('cheesecake'));
// now the [documents] object will only contain documents, which have "cheesecake" as any of their fields
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...