Agrega la búsqueda de vectores de Firestore a tus apps para dispositivos móviles con Extensiones de Firebase

1. Descripción general

En este codelab, aprenderás a agregar funciones de búsqueda potentes a tu app con la búsqueda de similitud vectorial de Firestore. Implementarás una función de búsqueda semántica en una app para tomar notas escritas con Swift y SwiftUI.

Consola de Cloud Firestore con algunos documentos, que también pueden verse en la app para iOS del lado derecho.

Qué aprenderás

  • Cómo instalar la extensión de Búsqueda de vectores con Firestore para calcular las incorporaciones de vectores
  • Cómo llamar a Firebase Cloud Functions desde una aplicación de Swift.
  • Cómo filtrar previamente los datos según el usuario que accedió

Lo que necesitarás

  • Xcode 15.3
  • El código de muestra del codelab La descargarás en un paso posterior del codelab.

2. Crea y configura un proyecto de Firebase

Para usar la extensión de búsqueda de vectores de Firebase, necesitas un proyecto de Firebase. En esta parte del codelab, crearás un nuevo proyecto de Firebase y activarás los servicios necesarios, como Cloud Firestore y Firebase Authentication.

Crea un proyecto de Firebase

  1. Accede a Firebase.
  2. En Firebase console, haz clic en Agregar proyecto y asígnale el nombre Firestore Vector Search Lab.Crea un proyecto, paso 1 de 3: elegir el nombre del proyecto
  3. Haz clic para avanzar por las opciones de creación de proyectos. Si se te solicita, acepta las condiciones de Firebase.
  4. En la pantalla de Google Analytics, desmarca la casilla Habilitar Google Analytics para este proyecto, ya que no usarás Analytics para esta app.
  5. Por último, haz clic en Crear proyecto.

Para obtener más información sobre los proyectos de Firebase, consulta la Información sobre los proyectos de Firebase.

Habilita y configura los productos de Firebase en la consola

La app que estás compilando usa varios productos de Firebase que están disponibles para las apps para Apple:

  • Firebase Authentication, a fin de permitir que los usuarios accedan a tu app con facilidad
  • Cloud Firestore, a fin de guardar datos estructurados en la nube y recibir notificaciones al instante cuando se modifiquen los datos
  • Reglas de seguridad de Firebase para proteger tu base de datos.

Algunos de estos productos necesitan una configuración especial o deben habilitarse mediante Firebase console.

Habilita la autenticación anónima para Firebase Authentication

Esta aplicación utiliza la autenticación anónima para permitir que los usuarios comiencen a usar la app sin tener que crear primero una cuenta. Esto da como resultado un proceso de integración sin inconvenientes. Para obtener más información sobre la autenticación anónima (y cómo actualizar a una cuenta con nombre), consulta Prácticas recomendadas para la autenticación anónima.

  1. En el panel del lado izquierdo de Firebase console, haz clic en Compilación > Autenticación. Luego, haz clic en Comenzar.Habilita la autenticación de Firebase
  2. Ahora te encuentras en el panel de Authentication. Allí puedes ver los usuarios que se registraron, configurar los proveedores de acceso y administrar la configuración.
  3. Selecciona la pestaña Método de acceso (o haz clic aquí para ir directamente a la pestaña).
  4. En las opciones del proveedor, haz clic en Anónimo, cambia la opción a Habilitar y, luego, haz clic en Guardar.

Configura Cloud Firestore

Esta aplicación de Swift usa Cloud Firestore para guardar notas. A continuación, te mostramos cómo configurar Cloud Firestore:

  1. En el panel del lado izquierdo de Firebase console, haz clic en Compilación > Base de datos de Firestore. Luego, haz clic en Crear base de datos.Habilita Cloud Firestore
  2. Selecciona la ubicación de tu base de datos y asegúrate de elegir una ubicación en la que Gemini esté disponible (puedes usar us-central1). Sin embargo, ten en cuenta que esta ubicación no se puede cambiar más adelante. Haz clic en Siguiente.
  3. Selecciona la opción Comenzar en modo de prueba. Lee la renuncia de responsabilidad sobre las reglas de seguridad. El modo de prueba garantiza que puedas escribir con libertad en la base de datos durante el desarrollo.Configura reglas de seguridad para Firestore en modo de prueba
  4. Haz clic en Crear para crear la base de datos.

3. Conectar la app para dispositivos móviles

En esta sección del codelab, descargarás el código fuente de una app simple para tomar notas y la conectarás al proyecto de Firebase que acabas de crear.

Descarga la app de ejemplo:

  1. Ve a https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios y clona el repositorio en tu máquina local.
  2. Abre el proyecto Notes.xcodeproj en Xcode

Conecta la app a tu proyecto de Firebase

Para que tu app pueda acceder a los servicios de Firebase, deberás configurarla en Firebase console. Puedes conectar múltiples aplicaciones cliente al mismo proyecto de Firebase. Por ejemplo, si creas una aplicación web o para Android, debes conectarlas al mismo proyecto de Firebase.

Para obtener más información sobre los proyectos de Firebase, consulta la Información sobre los proyectos de Firebase.

  1. En Firebase console, ve a la página de descripción general de tu proyecto de Firebase.La página de descripción general de Firebase console
  2. Haz clic en el ícono de iOS+ para agregar tu aplicación para iOS.
  3. En la pantalla Agrega Firebase a tu app para Apple, inserta el ID del paquete del proyecto de Xcode (com.google.firebase.codelab.Notes).
  4. Si quieres, puedes ingresar un sobrenombre para la app (Notas para iOS).
  5. Haz clic en Registrar app para avanzar al siguiente paso.
  6. Descarga el archivo GoogleServices-Info.plist.
  7. Arrastra GoogleServices-Info.plist a la carpeta Notes de tu proyecto de Xcode. Una buena forma de hacerlo es colocarla debajo del archivo Assets.xcassets.Arrastra el archivo plist a Xcode
  8. Selecciona Copiar elementos si es necesario, asegúrate de que el objetivo Notas esté seleccionado en Agregar a destinos y haz clic en Finalizar.Seleccionar "Copiar si es necesario" en el diálogo de opciones para agregar archivos
  9. En Firebase console, ahora puedes hacer clic para completar el resto del proceso de configuración: la muestra que descargaste al comienzo de esta sección ya tiene instalado el SDK de Firebase para Apple y la configuración de inicialización. Puedes finalizar el proceso haciendo clic en Ir a la consola.

Ejecuta la app

Es momento de que pruebes la app.

  1. En Xcode, ejecuta la app en el simulador de iOS. En el menú desplegable Run Destinations, primero selecciona uno de los simuladores de iOS.Selecciona un simulador de iOS en el menú desplegable Run Destinations
  2. Luego, haz clic en el botón Ejecutar o presiona ⌘ + R
  3. Una vez que la app se haya iniciado correctamente en el simulador, agrega un par de notas.
  4. En Firebase console, ve al navegador de datos de Firestore para ver los documentos nuevos que se crean a medida que agregas notas nuevas en la app.La consola de Cloud Firestore, que muestra algunos documentos, junto con el simulador de iOS, que muestra los mismos documentos

4. Instala la extensión de búsqueda de vectores con Firestore

En esta parte del codelab, instalarás la búsqueda de vectores con la extensión de Firestore y la configurarás según los requisitos de la app para tomar notas en la que estás trabajando.

Inicia la instalación de la extensión

  1. En la sección Firestore, haz clic en la pestaña Extensiones.Selección de la pestaña Extensiones de Firebase en la consola de Firestore
  2. Haz clic en Explorar el Centro de extensiones.Pestaña Extensiones de Firebase en la consola de Firestore
  3. Escribe "vector".
  4. Haz clic en "Búsqueda de vectores con la extensión de Firestore".Página de destino de Firebase Extensios Hub Esta acción te llevará a la página de detalles de la extensión, donde podrás obtener más información sobre la extensión, cómo funciona, qué servicios de Firebase requiere y cómo puedes configurarla.
  5. Haz clic en Instalar en Firebase console.El botón de instalación de la extensión de Búsqueda de vectores con Firestore
  6. Verás una lista de todos tus proyectos.
  7. Elige el proyecto que creaste en el primer paso de este codelab.Pantalla del selector de proyectos de Firebase

Configura la extensión

Las Extensiones de Firebase usan Cloud Functions para Firebase, que requiere que tu proyecto esté en el plan Blaze (pago por uso). Para poder usar la búsqueda de vectores con la extensión de Firestore, debes actualizar tu proyecto.

  1. Haz clic en Actualizar proyecto para continuar. Actualiza el proyecto al plan Blaze
  2. Selecciona una cuenta de facturación existente o crea una nueva. Haz clic en Continuar.Selecciona una cuenta de facturación
  3. Establece un presupuesto (p.ej., USD 10), haz clic en Continuar y, luego, en Comprar.Cómo configurar un presupuesto
  4. Revisa las APIs habilitadas y los recursos creados.Revisa las APIs habilitadas
  5. Habilita los servicios requeridos.Habilita los servicios obligatorios
  6. Cuando habilites Cloud Storage, selecciona el modo de prueba para las reglas de seguridad.
  7. Confirma que Cloud Storage usará la misma ubicación que tu instancia de Cloud Firestore.
  8. Cuando todos los servicios estén habilitados, haz clic en Siguiente.Haz clic en Siguiente después de habilitar todos los servicios
  9. Revisa el acceso otorgado a esta extensión.
  10. Configura la extensión:
    • Selecciona Vertex AI como LLM.
    • Ruta de recopilación: notas
    • Límite predeterminado de consultas: 3
    • Nombre del campo de entrada: text
    • Nombre del campo de salida: embedding
    • Nombre del campo de estado:* *status*
    • Incorporar documentos existentes:
    • Actualizar documentos existentes:
    • Ubicación de Cloud Function: us-central1
  11. Haz clic en Instalar extensión para finalizar la instalación.

Esto podría tardar unos minutos. Mientras esperas a que se complete la instalación, puedes avanzar a la siguiente sección del instructivo y leer información general sobre las incorporaciones vectoriales.

5. Formación

Mientras esperas a que finalice la instalación, aquí tienes información general sobre cómo funciona la extensión de búsqueda de vectores con Firestore.

¿Qué son los vectores, las incorporaciones y las bases de datos de vectores?

  • Los vectores son objetos matemáticos que representan la magnitud y dirección de una cantidad. Se pueden usar para representar datos de una manera que facilite la comparación y la búsqueda.
  • Las incorporaciones son vectores que representan el significado de una palabra o frase. Se crean entrenando una red neuronal en un gran corpus de texto y aprendiendo las relaciones entre palabras.
  • Las bases de datos vectoriales son bases de datos optimizadas para almacenar y buscar datos vectoriales. Permiten una búsqueda eficiente de vecinos más cercanos, que es el proceso de encontrar los vectores más similares a un vector de consulta determinado.

¿Cómo funciona la búsqueda de vectores?

La búsqueda de vectores consiste en comparar el vector de consulta con todos los vectores de la base de datos. Los vectores más similares al vector de consulta se devuelven como resultados de la búsqueda.

La similitud entre dos vectores se puede medir usando diversas métricas de distancia. La métrica de distancia más común es la similitud coseno, que mide el ángulo entre dos vectores.

6. Prueba la extensión de búsqueda de vectores con Firestore

Antes de usar la extensión de Búsqueda de vectores con Firestore en la app para iOS que descargaste antes en este codelab, puedes probar la extensión en Firebase console.

Leer documentación

Las Extensiones de Firebase incluyen documentación sobre cómo funcionan.

  1. Una vez que se termine de instalar la extensión, haz clic en el botón Get started. La página de descripción general de Extensiones de Firebase en Firebase console
  2. Consulte la pestaña "Cómo funciona esta extensión", donde se explica:
    • cómo calcular incorporaciones de documentos agregándolos a la colección notes
    • Cómo consultar el índice llamando a la función que admite llamadas ext-firestore-vector-search-queryCallable
    • o cómo consultar el índice agregando un documento de consulta a la colección _firestore-vector-search/index/queries.
    • También se explica cómo configurar una función de incorporación personalizada, lo que es útil si ninguno de los LLM compatibles con la extensión cumple con tus requisitos, y si deseas usar un LLM diferente para procesar las incorporaciones. Documentación para la extensión de búsqueda de vectores con Firestore
  3. Haz clic en el vínculo del panel de Cloud Firestore para ir a tu instancia de Firestore.
  4. Navega al documento _firestore-vector-search/index. Debería mostrar que la extensión terminó de calcular las incorporaciones de todos los documentos de notas que creaste en un paso anterior de este codelab.La configuración de índices en la consola de Firestore
  5. Para verificarlo, abre uno de los documentos de notas. Deberías ver un campo adicional llamado embedding de tipo vector<768>, así como un campo status.Un campo de incorporación de vectores dentro de la consola de Firestore

Crea un documento de muestra

Puedes crear un documento nuevo en Firebase console para ver la extensión en acción.

  1. En el navegador de datos de Firestore, navega a la colección notes y haz clic en + Agregar documento, en la columna del medio.Cómo agregar un documento nuevo
  2. Haz clic en ID automático para generar un nuevo ID de documento único.
  3. Agrega un campo llamado text de tipo cadena y pega texto en el campo value. Es importante que no se trate de lorem ipsum ni de otro texto aleatorio. Por ejemplo, elige un artículo de noticias.Cómo agregar un campo de texto
  4. Haz clic en Guardar.
    • Observa cómo la extensión agrega un campo de estado para indicar que está procesando datos.
    • Después de unos breves momentos, deberías ver un nuevo campo embedding con un valor de vector<768>.
    Actualización del estado de las incorporaciones vectoriales para el nuevo documento

Realiza una consulta

La extensión de Búsqueda de vectores con Firestore tiene una función muy útil que te permite consultar el índice del documento sin tener que conectar una app.

  1. En la sección Firestore de Firebase console, ve al documento _firestore-vector-search/index.
  2. Haz clic en + Iniciar colección (+ Start collection).Agrega una subcolección nueva
  3. Crea una nueva subcolección con el nombre queries.
  4. Crea un documento nuevo y establece el campo query en un texto que aparezca en uno de tus documentos. Esta opción funciona mejor para consultas semánticas, como “¿Cómo puedo asignar documentos de Firestore con Swift” (siempre que al menos una de las notas que agregaste tenga texto en el que se aborde este tema).Agrega un campo de consulta
  5. Es posible que veas un error en el estadoSe produjo un error
  6. Esto se debe a que falta un índice. Si quieres establecer la configuración de índices faltantes, ve a la consola de Google Cloud de tu proyecto. Para ello, sigue este vínculo y selecciona tu proyecto de la listaSelecciona el proyecto correcto
  7. En el Explorador de registros de Cloud, ahora deberías ver un mensaje de error que dice "FAILED_PRECONDITION: Missing vector configuration. Crea el índice requerido con el siguiente comando de gcloud: ...Mensaje de error en el explorador de registros
  8. El mensaje de error también contiene un comando gcloud que debes ejecutar para configurar el índice faltante.
  9. Ejecuta el siguiente comando desde tu línea de comandos. Si no tienes instalada la CLI de gcloud en tu máquina, sigue estas instrucciones para instalarla.
    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
    
    La creación del índice tarda unos minutos. Puedes verificar el progreso en la pestaña Índices de la sección Firestore de Firebase console.Estado del índice nuevo
  10. Una vez que el índice está configurado, puedes crear un nuevo documento de consulta.
  11. Ahora deberías ver una lista de los IDs de documento que coinciden en el campo de resultados.Resultado de la realización de una consulta semántica
  12. Copia uno de esos IDs y regresa a la colección notes.
  13. Usa ⌘+F para buscar el ID del documento que copiaste (este documento es el que mejor coincide con tu consulta).Cómo encontrar el ID de documento en la lista de documentos

7. Implementa la búsqueda semántica

Por último, debes conectar tu app para dispositivos móviles a la extensión de búsqueda de vectores con Firestore y, luego, implementar una función de búsqueda semántica que permitirá a tus usuarios buscar en sus notas con consultas en lenguaje natural.

Conecta la función que admite llamadas para realizar consultas

La extensión de búsqueda de vectores con Firestore incluye una Cloud Function a la que puedes llamar desde tu app para dispositivos móviles a fin de consultar el índice que creaste antes en este codelab. En este paso, establecerás una conexión entre tu app para dispositivos móviles y esta función que admite llamadas. El SDK de Swift de Firebase incluye APIs que facilitan la llamada a funciones remotas.

  1. Vuelve a Xcode y asegúrate de estar en el proyecto que clonaste en un paso anterior de este codelab.
  2. Abre el archivo NotesRepository.swift.
  3. Busca la línea que contiene private lazy var vectorSearchQueryCallable: Callable = functions.httpsCallable("")

Para invocar una Cloud Function que admite llamadas, debes proporcionar el nombre de la función a la que quieres llamar.

  1. Ve a Firebase console de tu proyecto y abre el elemento de menú Funciones en la sección Compilación.
  2. Verás una lista de las funciones que instaló la extensión.
  3. Busca el que se llama ext-firestore-vector-search-queryCallable y copia su nombre.
  4. Pega el nombre en el código. Ahora debería decir
    private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
    
    .

Llama a la función de consulta

  1. Busca el método performQuery.
  2. Llama a la función que admite llamadas invocando a
    let result = try await vectorSearchQueryCallable(searchTerm)
    

Como esta es una llamada remota, es posible que falle.

  1. Agrega la administración de errores básicos para detectarlos y registrarlos en la consola de Xcode.
    private func performQuery(searchTerm: String) async -> [String] {
      do {
        let result = try await vectorSearchQueryCallable(searchTerm)
        return [result]
      }
      catch {
        print(error.localizedDescription)
        return []
      }
    }
    

Conecta la IU

Para permitir que los usuarios busquen sus notas, implementarás una barra de búsqueda en la pantalla de lista de notas. Cuando el usuario escribe un término de búsqueda, debes invocar el método performQuery que implementaste en el paso anterior. Gracias a los modificadores de vista searchable y task que proporciona SwiftUI, esto solo requiere un par de líneas de código.

  1. Primero, abre NotesListScreen.swift
  2. Para agregar un cuadro de búsqueda a la vista de lista, agrega el modificador de vista .searchable(text: $searchTerm, prompt: "Search") justo encima de la línea .navigationTitle("Notes").
  3. Luego, invoca la función de búsqueda agregando el siguiente código a continuación:
.task(id: searchTerm, debounce: .milliseconds(800)) {
  await notesRepository.semanticSearch(searchTerm: searchTerm)
}

Este fragmento de código llama a tu método semanticSearch de forma asíncrona. Si proporcionas un tiempo de espera de 800 milisegundos, le indicas al modificador de tareas que anule el rebote en la entrada del usuario en 0.8 segundos. Esto significa que solo se llamará a semanticSearch cuando el usuario deje de escribir durante más de 0.8 segundos.

Tu código debería verse de la siguiente manera:

...
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")
...

Ejecuta la app

  1. Presiona ⌘ + R (o haz clic en el botón Ejecutar) para iniciar la app en el simulador de iOS.
  2. Deberías ver las mismas notas que agregaste en la app antes en este codelab, así como las que agregaste mediante Firebase console
  3. Deberías ver un campo de búsqueda en la parte superior de la lista Notes.
  4. Escribe un término que aparezca en uno de los documentos que agregaste. Una vez más, esto funciona mejor para consultas semánticas, como “Cómo puedo llamar a las APIs asíncronas de Firebase desde Swift” (siempre que al menos una de las notas que agregaste contenga texto que trate este tema).
  5. Es probable que esperes ver el resultado de la búsqueda, pero, en su lugar, la vista de lista está vacía, y la consola de Xcode muestra un mensaje de error: “The function was called with an invalid argumento” (Se llamó a la función con un argumento no válido).

La app de Notas, con una lista de resultados vacía

Esto significa que enviaste los datos en el formato incorrecto.

Analiza el mensaje de error

  1. Para averiguar cuál es el problema, ve a Firebase console
  2. Ir a la sección Funciones
  3. Busca la función ext-firestore-vector-search-queryCallable y abre el menú ampliado haciendo clic en los tres puntos verticales.
  4. Selecciona Ver registros para ir al explorador de registros.
  5. Deberías ver un error
Unhandled error ZodError: [
  {
    "code": "invalid_type",
    "expected": "object",
    "received": "string",
    "path": [],
    "message": "Expected object, received string"
  }
]

Esto significa que enviaste los datos en el formato incorrecto.

Usa los tipos de datos correctos

Para saber en qué formato espera la extensión que estén los parámetros, consulta su documentación.

  1. Ve a la sección Extensiones de Firebase console.
  2. Haz clic en Administrar ->Administra la búsqueda de vectores con la extensión de Firestore.
  3. En la sección Cómo funciona esta extensión, encontrarás una especificación de los parámetros de entrada y salida.Documentación del parámetro de entrada y el valor del resultado
  4. Regresa a Xcode y navega a NotesRepository.swift
  5. Agrega el siguiente código al comienzo del archivo:
    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 coincide con la estructura del parámetro de entrada que espera la extensión, según la documentación de la extensión. También contiene un atributo prefilter anidado que necesitarás más adelante.QueryResponse coincide con la estructura de la respuesta de la extensión.
  6. Encuentra la especificación de la función que admite llamadas y actualiza los tipos de entrada y salida
    private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
    
  7. Actualiza la invocación de la función que admite llamadas en 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 []
      }
    }
    

Vuelve a ejecutar la app

  1. Vuelve a ejecutar la app
  2. Escribir una búsqueda que contenga términos incluidos en una de tus notas
  3. Ahora deberías ver una lista filtrada de notas.

Captura de pantalla de la app con el resultado esperado

Filtra previamente los datos del usuario

Antes de comenzar a bailar para celebrar, hay un problema con la versión actual de la app: el conjunto de resultados contiene datos de todos los usuarios.

Para verificarlo, ejecuta la app en otro simulador y agrega más documentos. Los documentos nuevos solo aparecerán en ese simulador. Si vuelves a ejecutar la app en el otro simulador, solo verás los documentos que creaste la primera vez.

Si realizas una búsqueda, notarás que la llamada a vectorSearchQueryCallable muestra los IDs de documento que podrían pertenecer al otro usuario. Para evitar esto, debemos usar un filtro previo.

En performQuery, actualiza tu código de la siguiente manera:

  let prefilters: [QueryFilter] = if let uid = user?.uid {
    [QueryFilter(field: "userId", operator: "==", value: uid)]
  }
  else {
    []
  }

  let queryRequest = QueryRequest(query: searchTerm,
                                  limit: 2,
                                  prefilters: prefilters)

Esto filtrará previamente los datos según el ID del usuario que accedió. Como es de esperar, esto requiere que se actualice el índice de Firestore.

Ejecuta el siguiente comando desde la línea de comandos para definir un nuevo índice de Firestore que incluya userId y las incorporaciones vectoriales en el campo 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

Cuando se termine de compilar el índice, vuelve a ejecutar la app para verificar que funcione como se espera.

Conjunto de resultados prefiltrados

8. ¡Felicitaciones!

¡Felicitaciones por completar correctamente este codelab!

En este codelab, aprendiste a hacer lo siguiente:

  • Configura una base de datos de Cloud Firestore con la búsqueda semántica habilitada.
  • Crear una app simple de SwiftUI para interactuar con la base de datos
  • Implementa una barra de búsqueda con el modificador de vistas de búsqueda de SwiftUI y el modificador de tareas.
  • Llama a una Cloud Function para realizar una búsqueda semántica en la base de datos con la interfaz que admite llamadas del SDK de Firestore.

Con el conocimiento que adquiriste en este codelab, ahora puedes compilar aplicaciones potentes que aprovechan las capacidades de búsqueda semántica de Cloud Firestore para brindarles a los usuarios una experiencia de búsqueda más intuitiva y eficiente.

Para obtener más información sobre el nuevo campo de vectores de Firestore y cómo calcular las incorporaciones de vectores, consulta la documentación.