1. Présentation
Dans cet atelier de programmation, vous allez apprendre à ajouter des fonctionnalités de recherche puissantes à votre application à l'aide de la recherche de similarité vectorielle Firestore. Vous allez implémenter une fonctionnalité de recherche sémantique pour une application de prise de notes écrite en Swift et SwiftUI.
Objectifs de l'atelier
- Comment installer l'extension Vector Search avec Firestore pour calculer des embeddings vectoriels
- Appeler Firebase Cloud Functions à partir d'une application Swift
- Comment préfiltrer les données en fonction de l'utilisateur connecté
Prérequis
- Xcode 15.3
- Exemple de code de l'atelier de programmation Vous le téléchargerez à une étape ultérieure de l'atelier de programmation.
2. Créer et configurer un projet Firebase
Pour utiliser l'extension Firebase Vector Search, vous avez besoin d'un projet Firebase. Dans cette partie de l'atelier de programmation, vous allez créer un projet Firebase et activer les services requis, tels que Cloud Firestore et Firebase Authentication.
Créer un projet Firebase
- Connectez-vous à Firebase.
- Dans la console Firebase, cliquez sur Ajouter un projet, puis nommez votre projet Firestore Vector Search Lab.
- Cliquez sur les options souhaitées. Si vous y êtes invité, acceptez les conditions d'utilisation de Firebase.
- Sur l'écran Google Analytics, décochez la case Activer Google Analytics pour ce projet, car vous n'utiliserez pas Analytics pour cette application.
- Pour finir, cliquez sur Créer un projet.
Pour en savoir plus sur les projets Firebase, consultez Comprendre les projets Firebase.
Passer à un forfait Firebase supérieur
Pour utiliser les extensions Firebase et leurs services cloud sous-jacents, votre projet Firebase doit être associé au forfait Blaze avec paiement à l'usage, ce qui signifie qu'il est associé à un compte de facturation Cloud.
- Un compte de facturation Cloud nécessite un mode de paiement, comme une carte de crédit.
- Si vous débutez avec Firebase et Google Cloud, vérifiez si vous pouvez bénéficier d'un crédit de 300$et d'un compte de facturation Cloud en essai sans frais.
- Si vous suivez cet atelier de programmation dans le cadre d'un événement, demandez à l'organisateur s'il existe des crédits Cloud disponibles.
Pour passer à la formule Blaze, procédez comme suit:
- Dans la console Firebase, sélectionnez l'option Mettre à niveau votre forfait.
- Sélectionnez le forfait Blaze. Suivez les instructions à l'écran pour associer un compte de facturation Cloud à votre projet.
Si vous avez dû créer un compte de facturation Cloud dans le cadre de cette migration, vous devrez peut-être revenir au flux de migration dans la console Firebase pour la terminer.
Activer et configurer les produits Firebase dans la console
L'application que vous créez utilise plusieurs produits Firebase disponibles pour les applications Apple:
- Firebase Authentication, pour permettre à vos utilisateurs de se connecter facilement à votre application.
- Cloud Firestore, pour sauvegarder des données structurées sur le cloud et être notifié instantanément en cas de modification des données.
- Les règles de sécurité Firebase pour sécuriser votre base de données
Certains de ces produits nécessitent une configuration particulière ou doivent être activés via la console Firebase.
Activer l'authentification anonyme pour Firebase Authentication
Cette application utilise l'authentification anonyme pour permettre aux utilisateurs de commencer à l'utiliser sans avoir à créer un compte. Cela permet d'obtenir un processus d'intégration fluide. Pour en savoir plus sur l'authentification anonyme (et comment passer à un compte nommé), consultez la section Bonnes pratiques pour l'authentification anonyme.
- Dans le panneau de gauche de la console Firebase, cliquez sur Build > Authentication (Créer > Authentification). Cliquez ensuite sur Commencer.
- Vous êtes maintenant dans le tableau de bord "Authentification", où vous pouvez consulter les utilisateurs inscrits, configurer des fournisseurs de connexion et gérer les paramètres.
- Sélectionnez l'onglet Méthode de connexion (ou cliquez ici pour accéder directement à l'onglet).
- Cliquez sur Anonyme dans les options du fournisseur, mettez le bouton bascule sur Activer, puis cliquez sur Enregistrer.
Configurer Cloud Firestore
Cette application Swift utilise Cloud Firestore pour enregistrer des notes.
Voici comment configurer Cloud Firestore dans votre projet Firebase:
- Dans le panneau de gauche de la console Firebase, développez Build (Compilation), puis sélectionnez Firestore database (Base de données Firestore).
- Cliquez sur Créer une base de données.
- Laissez le champ Database ID (ID de la base de données) défini sur
(default)
. - Sélectionnez un emplacement pour votre base de données, puis cliquez sur Suivant.
Pour une application réelle, choisissez un emplacement proche de vos utilisateurs. - Cliquez sur Démarrer en mode test. Lisez la clause de non-responsabilité concernant les règles de sécurité.
Plus tard dans cet atelier de programmation, vous ajouterez des règles de sécurité pour sécuriser vos données. Ne distribuez pas ni n'exposez pas publiquement une application sans ajouter de règles de sécurité à votre base de données. - Cliquez sur Créer.
Configurer Cloud Storage for Firebase
L'application Web utilise Cloud Storage for Firebase pour stocker, importer et partager des photos.
Voici comment configurer Cloud Storage for Firebase dans votre projet Firebase:
- Dans le panneau de gauche de la console Firebase, développez Build (Compilation), puis sélectionnez Storage (Stockage).
- Cliquez sur Commencer.
- Sélectionnez un emplacement pour votre bucket Storage par défaut.
Les buckets dansUS-WEST1
,US-CENTRAL1
etUS-EAST1
peuvent profiter du niveau"Toujours sans frais" pour Google Cloud Storage. Les buckets situés dans toutes les autres zones géographiques sont soumis aux tarifs et à l'utilisation de Google Cloud Storage. - Cliquez sur Démarrer en mode test. Lisez la clause de non-responsabilité concernant les règles de sécurité.
Plus tard dans cet atelier de programmation, vous ajouterez des règles de sécurité pour sécuriser vos données. Ne distribuez pas ni n'exposez pas publiquement une application sans ajouter de règles de sécurité à votre bucket Storage. - Cliquez sur Créer.
3. Associer l'application mobile
Dans cette section de l'atelier de programmation, vous allez télécharger le code source d'une application de prise de notes simple et l'associer au projet Firebase que vous venez de créer.
Téléchargez l'exemple d'application
- Accédez à https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios et clonez le dépôt sur votre ordinateur local.
- Ouvrez le projet Notes.xcodeproj dans Xcode.
Associer l'application à votre projet Firebase
Pour que votre application puisse accéder aux services Firebase, vous devez la configurer dans la console Firebase. Vous pouvez associer plusieurs applications clientes au même projet Firebase. Par exemple, si vous créez une application Android ou Web, vous devez les associer au même projet Firebase.
Pour en savoir plus sur les projets Firebase, consultez Comprendre les projets Firebase.
- Dans la console Firebase, accédez à la page de présentation de votre projet Firebase.
- Cliquez sur l'icône iOS+ pour ajouter votre application iOS.
- Sur l'écran Ajouter Firebase à votre application Apple, insérez l'ID de bundle du projet Xcode (com.google.firebase.codelab.Notes).
- Si vous le souhaitez, vous pouvez saisir un pseudo pour l'application (Remarques pour iOS).
- Cliquez sur "Enregistrer l'application" pour passer à l'étape suivante.
- Téléchargez le fichier GoogleServices-Info.plist.
- Faites glisser GoogleServices-Info.plist dans le dossier Notes de votre projet Xcode. Pour ce faire, placez-le sous le fichier Assets.xcassets.
- Sélectionnez Copy items if needed (Copier les éléments si nécessaire), assurez-vous que la cible Notes est sélectionnée dans Add to targets (Ajouter aux cibles), puis cliquez sur Finish (Terminer).
- Dans la console Firebase, vous pouvez maintenant suivre le reste de la procédure de configuration en cliquant sur les différentes étapes. Le SDK Firebase Apple est déjà installé dans l'exemple que vous avez téléchargé au début de cette section, et l'initialisation est configurée. Pour terminer la procédure, cliquez sur Accéder à la console.
Exécuter l'application
Il est maintenant temps de tester l'application.
- Retournez dans Xcode et exécutez l'application sur le simulateur iOS. Dans le menu déroulant Destinations d'exécution, sélectionnez d'abord l'un des simulateurs iOS.
- Cliquez ensuite sur le bouton Run (Exécuter) ou appuyez sur ⌘+R.
- Une fois l'application lancée sur le simulateur, ajoutez quelques remarques.
- Dans la console Firebase, accédez au navigateur de données Firestore pour voir les nouveaux documents créés lorsque vous ajoutez des notes dans l'application.
4. Installer l'extension Vector Search avec Firestore
Dans cette partie de l'atelier de programmation, vous allez installer l'extension Vector Search with Firestore et la configurer en fonction des exigences de l'application de prise de notes sur laquelle vous travaillez.
Lancer l'installation de l'extension
- Toujours dans la section "Firestore", cliquez sur l'onglet Extensions.
- Cliquez sur Explorer Extensions Hub.
- Saisissez "vector" (vecteur).
- Cliquez sur "Recherche vectorielle avec l'extension Firestore". Vous accédez alors à la page d'informations de l'extension, où vous pouvez en savoir plus sur son fonctionnement, les services Firebase dont elle a besoin et comment la configurer.
- Cliquez sur Installer dans la console Firebase.
- La liste de tous vos projets s'affiche.
- Sélectionnez le projet que vous avez créé à la première étape de cet atelier de programmation.
Configurer l'extension
- Examinez les API activées et les ressources créées.
- Activez les services requis.
- Une fois tous les services activés, cliquez sur Suivant.
- Examiner l'accès accordé à cette extension
- Configurez l'extension:
- Sélectionnez Vertex AI comme LLM.
- Chemin de la collection: notes
- Limite de requête par défaut: 3
- Nom du champ de saisie: text
- Nom du champ de sortie: embedding
- Nom du champ d'état:* *status*
- Intégrer des documents existants: Oui
- Mettre à jour les documents existants: Oui
- Emplacement de la fonction Cloud: us-central1
- Cliquez sur Installer l'extension pour finaliser l'installation.
Cette opération peut prendre quelques minutes. En attendant que l'installation soit terminée, n'hésitez pas à passer à la section suivante du tutoriel et à lire des informations générales sur les embeddings vectoriels.
5. Contexte
Pendant que l'installation se termine, voici quelques informations sur le fonctionnement de l'extension de recherche vectorielle avec Firestore.
Que sont les vecteurs, les embeddings et les bases de données vectorielles ?
- Les vecteurs sont des objets mathématiques qui représentent la magnitude et la direction d'une quantité. Ils peuvent être utilisés pour représenter les données de manière à faciliter la comparaison et la recherche.
- Les embeddings sont des vecteurs qui représentent la signification d'un mot ou d'une expression. Ils sont créés en entraînant un réseau de neurones sur un vaste corpus de texte et en apprenant les relations entre les mots.
- Les bases de données vectorielles sont des bases de données optimisées pour stocker et rechercher des données vectorielles. Ils permettent une recherche des plus proches voisins efficace, c'est-à-dire le processus consistant à trouver les vecteurs les plus similaires à un vecteur de requête donné.
Comment fonctionne la recherche vectorielle ?
La recherche vectorielle consiste à comparer le vecteur de requête à tous les vecteurs de la base de données. Les vecteurs les plus similaires au vecteur de requête sont renvoyés en tant que résultats de recherche.
La similarité entre deux vecteurs peut être mesurée à l'aide de différentes métriques de distance. La métrique de distance la plus courante est la similarité cosinus, qui mesure l'angle entre deux vecteurs.
6. Essayer la recherche vectorielle avec l'extension Firestore
Avant d'utiliser l'extension Vector Search avec Firestore dans l'application iOS que vous avez téléchargée précédemment dans cet atelier de programmation, vous pouvez la tester dans la console Firebase.
Lire la documentation
Les extensions Firebase incluent une documentation sur leur fonctionnement.
- Une fois l'extension installée, cliquez sur le bouton Commencer.
- Consultez l'onglet "Fonctionnement de l'extension". Il explique:
- comment calculer des représentations vectorielles continues pour des documents en les ajoutant à la collection
notes
; - comment interroger l'index en appelant la fonction appelable
ext-firestore-vector-search-queryCallable
; - ou comment interroger l'index en ajoutant un document de requête à la collection
_firestore-vector-search/index/queries
. - Il explique également comment configurer une fonction d'embedding personnalisée. Cela peut être utile si aucun des LLM compatibles avec l'extension ne répond à vos exigences et que vous souhaitez utiliser un autre LLM pour calculer des embeddings.
- comment calculer des représentations vectorielles continues pour des documents en les ajoutant à la collection
- Cliquez sur le lien Tableau de bord Cloud Firestore pour accéder à votre instance Firestore.
- Accédez au document
_firestore-vector-search/index
. Il devrait indiquer que l'extension a terminé de calculer les représentations vectorielles continues pour tous les documents de notes que vous avez créés à une étape précédente de cet atelier de programmation. - Pour vérifier cela, ouvrez l'un des documents de notes. Vous devriez voir un champ supplémentaire nommé
embedding
de typevector<768>
, ainsi qu'un champstatus
.
Créer un exemple de document
Vous pouvez créer un document dans la console Firebase pour voir l'extension en action.
- Toujours dans le navigateur de données Firestore, accédez à la collection
notes
, puis cliquez sur + Ajouter un document dans la colonne du milieu. - Cliquez sur ID automatique pour générer un nouvel ID de document unique.
- Ajoutez un champ nommé
text
de type chaîne, puis collez du texte dans le champ value (Valeur). Il est important que ce ne soit pas du lorem ipsum ni un autre texte aléatoire. Choisissez un article de presse, par exemple. - Cliquez sur Enregistrer.
- Notez que l'extension ajoute un champ d'état pour indiquer qu'elle traite des données.
- Après un court instant, un nouveau champ
embedding
avec une valeurvector<768>
devrait s'afficher.
Effectuer une requête
L'extension de recherche vectorielle avec Firestore dispose d'une petite fonctionnalité pratique qui vous permet d'interroger l'index de documents sans avoir à connecter une application.
- Dans la section "Firestore" de la console Firebase, accédez au document
_firestore-vector-search/index
. - Cliquez sur + Commencer une collection.
- Créez une sous-collection nommée
queries
. - Créez un document et définissez le champ
query
sur un texte qui apparaît dans l'un de vos documents. Cette fonctionnalité fonctionne mieux pour les requêtes sémantiques, comme "Comment mapper des documents Firestore avec Swift" (à condition qu'au moins une des notes que vous avez ajoutées contienne du texte sur ce sujet). - Une erreur peut s'afficher dans l'état
- Cela est dû à un indice manquant. Pour configurer la configuration d'index manquante, accédez à la console Google Cloud de votre projet en suivant ce lien, puis sélectionnez votre projet dans la liste.
- Dans l'explorateur de journaux Cloud, vous devriez maintenant voir le message d'erreur "FAILED_PRECONDITION: Configuration de l'index vectoriel manquante. Veuillez créer l'index requis avec la commande gcloud suivante: ..."
- Le message d'erreur contient également une commande
gcloud
que vous devez exécuter pour configurer l'index manquant. - Exécutez la commande suivante à partir de votre ligne de commande. Si la CLI
gcloud
n'est pas installée sur votre machine, suivez les instructions pour l'installer.
La création de l'index prend quelques minutes. Vous pouvez vérifier la progression dans l'onglet Indexes (Index) de la section Firestore de la console Firebase.gcloud alpha firestore indexes composite create --project=INSERT-YOUR=PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding
- Une fois l'index configuré, vous pouvez créer un document de requête.
- Une liste des ID de document correspondants devrait s'afficher dans le champ des résultats.
- Copiez l'un de ces ID, puis revenez à la collection
notes
. - Appuyez sur ⌘+F pour rechercher l'ID de document que vous avez copié. Il s'agit du document qui correspond le mieux à votre requête.
7. Implémenter la recherche sémantique
Il est enfin temps de connecter votre application mobile à l'extension Vector Search with Firestore et d'implémenter une fonctionnalité de recherche sémantique qui permettra à vos utilisateurs de rechercher leurs notes à l'aide de requêtes en langage naturel.
Associer la fonction appelable pour effectuer des requêtes
L'extension Vector Search with Firestore inclut une fonction Cloud que vous pouvez appeler depuis votre application mobile pour interroger l'index que vous avez créé précédemment dans cet atelier de programmation. À cette étape, vous allez établir une connexion entre votre application mobile et cette fonction appelable. Le SDK Swift de Firebase inclut des API qui facilitent l'appel de fonctions distantes.
- Revenez à Xcode et assurez-vous d'être dans le projet que vous avez cloné à une étape précédente de cet atelier de programmation.
- Ouvrez le fichier
NotesRepository.swift
. - Recherchez la ligne contenant
private lazy var vectorSearchQueryCallable: Callable
.= functions.httpsCallable("")
Pour appeler une fonction Cloud appelable, vous devez indiquer le nom de la fonction que vous souhaitez appeler.
- Accédez à la console Firebase de votre projet, puis ouvrez l'élément de menu Fonctions dans la section Créer.
- La liste des fonctions installées par l'extension s'affiche.
- Recherchez celui nommé
ext-firestore-vector-search-queryCallable
, puis copiez son nom. - Collez le nom dans votre code. Le résultat doit se présenter comme suit :
private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
Appeler la fonction de requête
- Recherchez la méthode
performQuery
. - Appelez votre fonction appelable en appelant
.let result = try await vectorSearchQueryCallable(searchTerm)
Comme il s'agit d'un appel à distance, il peut échouer.
- Ajoutez une gestion des erreurs de base pour détecter les erreurs et les consigner dans la console Xcode.
private func performQuery(searchTerm: String) async -> [String] { do { let result = try await vectorSearchQueryCallable(searchTerm) return [result] } catch { print(error.localizedDescription) return [] } }
Connecter l'UI
Pour permettre aux utilisateurs de rechercher des notes, vous allez implémenter une barre de recherche sur l'écran de la liste des notes. Lorsque l'utilisateur saisit un terme de recherche, vous devez appeler la méthode performQuery
que vous avez implémentée à l'étape précédente. Grâce aux modificateurs de vue searchable
et task
fournis par SwiftUI, cela ne nécessite que quelques lignes de code.
- Commencez par ouvrir
NotesListScreen.swift
. - Pour ajouter un champ de recherche à la vue Liste, ajoutez le modificateur de vue
.searchable(text: $searchTerm, prompt: "Search")
juste au-dessus de la ligne.navigationTitle("Notes")
. - Appelez ensuite la fonction de recherche en ajoutant le code suivant juste en dessous:
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
Cet extrait de code appelle votre méthode semanticSearch
de manière asynchrone. En fournissant un délai avant expiration de 800 millisecondes, vous indiquez au modificateur de tâche de debouncer la saisie de l'utilisateur pendant 0,8 seconde. Cela signifie que semanticSearch
ne sera appelé que lorsque l'utilisateur mettra fin à la saisie pendant plus de 0,8 seconde.
Votre code devrait se présenter comme suit:
...
List(repository.notes) { note in
NavigationLink(value: note) {
NoteRowView(note: note)
}
.swipeActions {
Button(role: .destructive, action: { deleteNote(note: note) }) {
Label("Delete", systemImage: "trash")
}
}
}
.searchable(text: $searchTerm, prompt: "Search")
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
.navigationTitle("Notes")
...
Exécuter l'application
- Appuyez sur ⌘+R (ou cliquez sur le bouton "Run" (Exécuter)) pour lancer l'application dans le simulateur iOS.
- Vous devriez voir les mêmes notes que celles que vous avez ajoutées dans l'application plus tôt dans cet atelier de programmation, ainsi que toutes les notes que vous avez ajoutées via la console Firebase.
- Un champ de recherche devrait s'afficher en haut de la liste Notes.
- Saisissez un terme qui apparaît dans l'un des documents que vous avez ajoutés. Encore une fois, cette fonctionnalité fonctionne mieux pour les requêtes sémantiques, comme "Comment appeler des API Firebase asynchrones depuis Swift" (à condition qu'au moins l'une des notes que vous avez ajoutées contienne du texte sur ce sujet).
- Vous vous attendez probablement à voir le résultat de la recherche, mais la vue Liste est vide et la console Xcode affiche un message d'erreur: "The function was called with an invalid argument" (La fonction a été appelée avec un argument non valide).
Cela signifie que vous avez envoyé les données dans le mauvais format.
Analyser le message d'erreur
- Pour savoir ce qui ne va pas, accédez à la console Firebase.
- Accédez à la section Fonctions.
- Recherchez la fonction
ext-firestore-vector-search-queryCallable
, puis ouvrez le menu à développer en cliquant sur les trois points verticaux. - Sélectionnez Afficher les journaux pour accéder à l'explorateur de journaux.
- Un message d'erreur devrait s'afficher.
Unhandled error ZodError: [
{
"code": "invalid_type",
"expected": "object",
"received": "string",
"path": [],
"message": "Expected object, received string"
}
]
Cela signifie que vous avez envoyé les données dans le mauvais format.
Utiliser les bons types de données
Pour savoir dans quel format l'extension attend les paramètres, consultez la documentation de l'extension.
- Accédez à la section Extensions de la console Firebase.
- Cliquez sur Gérer ->.
- Dans la section Fonctionnement de cette extension, vous trouverez une spécification des paramètres d'entrée et de sortie.
- Revenez à Xcode, puis accédez à
NotesRepository.swift
. - Ajoutez le code suivant au début du fichier:
private struct QueryRequest: Codable { var query: String var limit: Int? var prefilters: [QueryFilter]? } private struct QueryFilter: Codable { var field: String var `operator`: String var value: String } private struct QueryResponse: Codable { var ids: [String] }
QueryRequest
correspond à la structure du paramètre d'entrée attendu par l'extension, conformément à la documentation de l'extension. Il contient également un attributprefilter
imbriqué dont vous aurez besoin plus tard.QueryResponse
correspond à la structure de la réponse de l'extension. - Recherchez la spécification de la fonction appelable et mettez à jour les types d'entrée et de sortie.
private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
- Mettre à jour l'appel de la fonction appelable dans
performQuery
private func performQuery(searchTerm: String) async -> [String] { do { let queryRequest = QueryRequest(query: searchTerm, limit: 2) let result = try await vectorSearchQueryCallable(queryRequest) print(result.ids) return result.ids } catch { print(error.localizedDescription) return [] } }
Exécuter à nouveau l'application
- Exécuter à nouveau l'application
- Saisissez une requête de recherche contenant des termes inclus dans l'une de vos notes.
- La liste filtrée des notes s'affiche.
Préfiltrer les données utilisateur
Avant de danser de joie, notez qu'il existe un problème avec la version actuelle de l'application: l'ensemble de résultats contient les données de tous les utilisateurs.
Pour le vérifier, exécutez l'application sur un autre simulateur et ajoutez d'autres documents. Les nouveaux documents ne s'afficheront que dans ce simulateur. Si vous exécutez à nouveau l'application sur l'autre simulateur, vous ne verrez que les documents que vous avez créés la première fois.
Si vous effectuez une recherche, vous remarquerez que l'appel à vectorSearchQueryCallable
renvoie des ID de document qui peuvent appartenir à l'autre utilisateur. Pour éviter cela, nous devons utiliser un préfiltre.
Dans performQuery
, mettez à jour votre code comme suit:
let prefilters: [QueryFilter] = if let uid = user?.uid {
[QueryFilter(field: "userId", operator: "==", value: uid)]
}
else {
[]
}
let queryRequest = QueryRequest(query: searchTerm,
limit: 2,
prefilters: prefilters)
Les données seront préfiltrées en fonction de l'ID de l'utilisateur connecté. Comme vous pouvez l'imaginer, cela nécessite la mise à jour de l'index Firestore.
Exécutez la commande suivante à partir de la ligne de commande pour définir un nouvel indice Firestore qui inclut à la fois les userId
et les représentations vectorielles continues dans le champ embedding
.
gcloud alpha firestore indexes composite create --project=INSERT-YOUR-PROJECT-ID-HERE --collection-group=notes --query-scope=COLLECTION --field-config=order=ASCENDING,field-path=userId --field-config=vector-config='{"dimension":"768","flat": "{}"}',field-path=embedding
Une fois l'indexation terminée, exécutez à nouveau l'application pour vérifier qu'elle fonctionne comme prévu.
8. Félicitations
Félicitations ! Vous avez terminé cet atelier de programmation.
Dans cet atelier de programmation, vous avez appris à:
- Configurez une base de données Cloud Firestore avec la recherche sémantique activée.
- Créez une application SwiftUI simple pour interagir avec la base de données.
- Implémentez une barre de recherche à l'aide du modificateur de vue de recherche et du modificateur de tâche de SwiftUI.
- Appelez une fonction Cloud pour effectuer une recherche sémantique dans la base de données à l'aide de l'interface Callable du SDK Firestore.
Grâce aux connaissances acquises dans cet atelier de programmation, vous pouvez désormais créer des applications puissantes qui exploitent les fonctionnalités de recherche sémantique de Cloud Firestore pour offrir aux utilisateurs une expérience de recherche plus intuitive et efficace.
Pour en savoir plus sur le nouveau champ vectoriel de Firestore et sur la façon de calculer des embeddings vectoriels, consultez la documentation.