1. Ringkasan
Dalam codelab ini, Anda akan mempelajari cara menambahkan fitur penelusuran canggih ke aplikasi menggunakan penelusuran kemiripan vektor Firestore. Anda akan mengimplementasikan fitur penelusuran semantik untuk aplikasi pencatatan yang ditulis dengan Swift dan SwiftUI.
Yang akan Anda pelajari
- Cara menginstal ekstensi Vector Search dengan Firestore untuk menghitung embedding vektor.
- Cara memanggil Firebase Cloud Functions dari aplikasi Swift.
- Cara memfilter data terlebih dahulu berdasarkan pengguna yang login.
Yang akan Anda butuhkan
- Xcode 15.3
- Kode contoh codelab. Anda akan mendownloadnya pada langkah codelab berikutnya.
2. Membuat dan menyiapkan project Firebase
Untuk menggunakan ekstensi Firebase Vector Search, Anda memerlukan project Firebase. Di bagian codelab ini, Anda akan membuat project Firebase baru, dan mengaktifkan layanan yang diperlukan seperti Cloud Firestore dan Firebase Authentication.
Membuat project Firebase
- Login ke Firebase
- Di Firebase console, klik Add project, lalu beri nama project Anda dengan Firestore Vector Search Lab
- Klik opsi pembuatan project. Setujui persyaratan Firebase jika diminta.
- Di layar Google Analytics, hapus centang kotak Aktifkan Google Analytics untuk project ini, karena Anda tidak akan menggunakan Analytics untuk aplikasi ini.
- Terakhir, klik Create project.
Untuk mempelajari project Firebase lebih lanjut, lihat artikel Memahami project Firebase.
Mengaktifkan dan menyiapkan produk Firebase di konsol
Aplikasi yang Anda bangun menggunakan beberapa produk Firebase yang tersedia untuk aplikasi Apple:
- Firebase Authentication untuk memudahkan pengguna login ke aplikasi Anda.
- Cloud Firestore untuk menyimpan data terstruktur di cloud dan mendapatkan notifikasi instan saat data berubah.
- Aturan Keamanan Firebase untuk mengamankan database Anda.
Beberapa produk ini memerlukan konfigurasi khusus atau harus diaktifkan menggunakan Firebase console.
Mengaktifkan autentikasi anonim untuk Firebase Authentication
Aplikasi ini menggunakan autentikasi anonim untuk memungkinkan pengguna mulai menggunakan aplikasi tanpa harus membuat akun terlebih dahulu. Proses orientasi ini akan berjalan lancar tanpa hambatan. Untuk mempelajari lebih lanjut autentikasi anonim (dan cara mengupgrade ke akun bernama), lihat Praktik Terbaik untuk autentikasi anonim.
- Di panel sebelah kiri Firebase console, klik Build > Authentication. Lalu, klik Mulai.
- Anda kini berada di dasbor Authentication, tempat Anda dapat melihat pengguna yang mendaftar, mengonfigurasi penyedia login, dan mengelola setelan.
- Pilih tab Metode login (atau klik di sini untuk langsung membuka tab tersebut).
- Klik Anonymous dari opsi penyedia, alihkan tombol ke Enable, lalu klik Save.
Menyiapkan Cloud Firestore
Aplikasi Swift ini menggunakan Cloud Firestore untuk menyimpan catatan. Berikut adalah cara menyiapkan Cloud Firestore:
- Di panel sebelah kiri Firebase console, klik Build > Firestore Database. Kemudian klik Create database.
- Pilih lokasi untuk database Anda, dan pastikan Anda memilih lokasi tempat Gemini tersedia (Anda cukup menggunakan us-central1). Namun, perhatikan bahwa lokasi ini tidak dapat diubah nanti. Klik Next.
- Pilih opsi Mulai dalam mode pengujian. Baca pernyataan penyangkalan tentang aturan keamanan. Mode pengujian memastikan Anda dapat menulis ke database dengan bebas selama pengembangan.
- Klik Create untuk membuat database.
3. Menghubungkan aplikasi seluler
Di bagian codelab ini, Anda akan mendownload kode sumber untuk aplikasi pencatatan sederhana, dan menghubungkannya ke project Firebase yang baru saja Anda buat.
Unduh aplikasi contoh
- Buka https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios, dan clone repositori ke mesin lokal Anda
- Buka project Notes.xcodeproj di Xcode
Menghubungkan aplikasi ke project Firebase
Agar aplikasi Anda dapat mengakses layanan Firebase, Anda harus menyiapkan aplikasi tersebut di Firebase console. Anda dapat menghubungkan beberapa aplikasi klien ke project Firebase yang sama, misalnya jika Anda membuat aplikasi Android atau web, Anda harus menghubungkannya ke project Firebase yang sama.
Untuk mempelajari project Firebase lebih lanjut, lihat artikel Memahami project Firebase.
- Di Firebase console, buka halaman ringkasan project Firebase Anda.
- Klik ikon iOS+ untuk menambahkan aplikasi iOS Anda.
- Di layar Add Firebase to your Apple app, masukkan ID paket dari project Xcode (com.google.firebase.codelab.Notes).
- Jika berkenan, Anda dapat memasukkan nama panggilan aplikasi (Catatan untuk iOS).
- Klik Register app untuk melanjutkan ke langkah berikutnya.
- Download file GoogleServices-Info.plist.
- Tarik GoogleServices-Info.plist ke folder Notes di project Xcode Anda. Cara yang tepat untuk melakukannya adalah dengan menaruhnya di bawah file Assets.xcassets.
- Pilih Copy items if needed, pastikan target Notes dipilih di opsi Add to targets, lalu klik Finish.
- Di Firebase console, sekarang Anda dapat mengklik proses penyiapan selanjutnya: contoh yang Anda download di awal bagian ini sudah diinstal Firebase Apple SDK, dan sudah disiapkan inisialisasi. Anda dapat menyelesaikan prosesnya dengan mengklik Lanjutkan ke konsol.
Menjalankan aplikasi
Saatnya mencoba aplikasi ini!
- Kembali ke Xcode, jalankan aplikasi di Simulator iOS. Di menu drop-down Run Destinations, pilih salah satu Simulator iOS terlebih dahulu.
- Kemudian, klik tombol Run, atau tekan ⌘ + R
- Setelah aplikasi berhasil diluncurkan di Simulator, tambahkan beberapa catatan.
- Di Firebase console, buka browser data Firestore, sehingga Anda dapat melihat dokumen baru yang sedang dibuat saat menambahkan catatan baru di aplikasi.
4. Menginstal ekstensi Vector Search dengan Firestore
Di bagian codelab ini, Anda akan menginstal ekstensi Vector Search dengan Firestore, dan mengonfigurasinya sesuai persyaratan aplikasi pencatatan yang sedang Anda kerjakan.
Mulai penginstalan ekstensi
- Masih di bagian Firestore, klik tab Extensions.
- Klik Explore Extensions Hub.
- Ketik "vektor".
- Klik "Vector Search dengan ekstensi Firestore". Anda akan diarahkan ke halaman detail ekstensi, tempat Anda dapat membaca ekstensi lebih lanjut, cara kerjanya, layanan Firebase yang diperlukan, dan cara mengonfigurasinya.
- Klik Install in Firebase console.
- Anda akan melihat daftar semua project.
- Pilih project yang Anda buat pada langkah pertama codelab ini.
Mengonfigurasi ekstensi
Firebase Extensions memanfaatkan Cloud Functions for Firebase, sehingga project Anda harus menggunakan paket Blaze bayar sesuai penggunaan. Sebelum dapat menggunakan ekstensi Vector Search dengan Firestore, Anda harus meng-upgrade project.
- Klik Upgrade project untuk melanjutkan.
- Pilih akun penagihan yang sudah ada, atau buat akun baru. Klik continue.
- Tetapkan anggaran (misalnya 10 USD), klik Lanjutkan, lalu klik Beli.
- Tinjau API yang diaktifkan dan resource yang dibuat.
- Aktifkan layanan yang diperlukan.
- Saat mengaktifkan Cloud Storage, pilih test mode untuk aturan keamanan.
- Pastikan Cloud Storage akan menggunakan lokasi yang sama dengan instance Cloud Firestore Anda.
- Setelah semua layanan diaktifkan, klik Next.
- Tinjau akses yang diberikan untuk ekstensi ini.
- Konfigurasi ekstensi:
- Pilih Vertex AI sebagai LLM
- Jalur koleksi: catatan
- Batas kueri default: 3
- Nama kolom input: text
- Nama kolom output: penyematan
- Nama bidang Status:* *status*
- Menyematkan dokumen yang ada: Ya
- Memperbarui dokumen yang ada: Ya
- Lokasi Cloud Function: us-central1
- Klik Instal ekstensi untuk menyelesaikan penginstalan.
Proses ini mungkin perlu waktu beberapa menit. Sementara Anda menunggu instalasi selesai, silakan lanjutkan ke bagian tutorial berikutnya dan membaca beberapa informasi latar belakang tentang embedding vektor.
5. Latar belakang
Sementara Anda menunggu penginstalan selesai, berikut adalah beberapa informasi latar belakang tentang cara kerja ekstensi Vector Search dengan Firestore.
Apa itu Vektor, Embedding, dan Database Vektor?
- Vektor adalah objek matematika yang mewakili besaran dan arah suatu kuantitas. Mereka dapat digunakan untuk menampilkan data dengan cara yang membuatnya lebih mudah untuk dibandingkan dan ditelusuri.
- Embeddings adalah vektor yang mewakili arti sebuah kata atau frasa. Model ini dibuat dengan melatih jaringan neural pada korpus teks yang besar dan mempelajari hubungan antar-kata.
- Database vektor adalah database yang dioptimalkan untuk menyimpan dan menelusuri data vektor. Fungsi ini memungkinkan pencarian tetangga terdekat yang efisien, yang merupakan proses untuk menemukan vektor yang paling mirip dengan vektor kueri tertentu.
Bagaimana cara kerja Vector Search?
Penelusuran vektor bekerja dengan membandingkan vektor kueri dengan semua vektor dalam database. Vektor yang paling mirip dengan vektor kueri ditampilkan sebagai hasil penelusuran.
Kesamaan antara dua vektor dapat diukur menggunakan berbagai metrik jarak. Metrik jarak yang paling umum adalah kesamaan kosinus, yang mengukur sudut antara dua vektor.
6. Mencoba Vector Search dengan ekstensi Firestore
Sebelum menggunakan ekstensi Vector Search dengan Firestore di aplikasi iOS yang Anda download sebelumnya di codelab ini, Anda dapat mencoba ekstensi tersebut di Firebase console.
Baca dokumentasi
Firebase Extensions menyertakan dokumentasi tentang cara kerjanya.
- Setelah ekstensi selesai diinstal, klik tombol Mulai.
- Lihat tab "Cara kerja ekstensi ini" - tab ini menjelaskan:
- cara menghitung embeddings untuk dokumen
dengan menambahkannya ke koleksi
notes
, - cara membuat kueri indeks dengan memanggil fungsi callable
ext-firestore-vector-search-queryCallable
, - atau cara membuat kueri indeks dengan menambahkan dokumen kueri ke koleksi
_firestore-vector-search/index/queries
. - Artikel ini juga menjelaskan cara menyiapkan fungsi penyematan kustom. Cara ini berguna jika tidak ada LLM yang didukung oleh ekstensi yang memenuhi persyaratan Anda, dan Anda ingin menggunakan LLM yang berbeda untuk menghitung embeddings.
- cara menghitung embeddings untuk dokumen
dengan menambahkannya ke koleksi
- Klik link dasbor Cloud Firestore untuk membuka instance Firestore Anda
- Buka dokumen
_firestore-vector-search/index
. Ini akan menunjukkan bahwa ekstensi telah selesai menghitung embeddings untuk semua dokumen catatan yang Anda buat di langkah sebelumnya dalam codelab ini. - Untuk memverifikasi hal ini, buka salah satu dokumen catatan, dan Anda akan melihat kolom tambahan bernama
embedding
dari jenisvector<768>
, serta kolomstatus
.
Membuat dokumen contoh
Anda dapat membuat dokumen baru di Firebase console untuk melihat cara kerja ekstensi.
- Masih di browser data Firestore, buka koleksi
notes
, lalu klik + Add document di kolom tengah. - Klik ID Otomatis untuk membuat ID dokumen unik yang baru.
- Tambahkan kolom bernama
text
dari string jenis, lalu tempelkan beberapa teks ke kolom value. Perlu diperhatikan bahwa ini bukan lorem ipsum atau teks acak lainnya. Pilih artikel berita, misalnya. - Klik Simpan.
- Perhatikan cara ekstensi menambahkan kolom status untuk menunjukkan bahwa ekstensi sedang memproses data.
- Setelah beberapa saat, Anda akan melihat kolom baru
embedding
dengan nilaivector<768>
.
Menjalankan kueri
Ekstensi Vector Search dengan Firestore memiliki fitur kecil bagus yang memungkinkan Anda membuat kueri indeks dokumen tanpa harus menghubungkan aplikasi.
- Di bagian Firestore pada Firebase console, buka dokumen
_firestore-vector-search/index
- Klik + Mulai pengumpulan
- Buat subkoleksi baru bernama
queries
- Buat dokumen baru dan tetapkan kolom
query
ke teks yang muncul di salah satu dokumen Anda. Cara ini paling cocok untuk kueri semantik, seperti "Bagaimana cara memetakan dokumen Firestore dengan Swift" (disediakan setidaknya satu catatan yang Anda tambahkan berisi teks yang membahas topik ini). - Anda mungkin melihat error dalam status
- Hal ini terjadi karena indeks tidak ada. Untuk menyiapkan konfigurasi indeks yang tidak ada, buka Konsol Google Cloud untuk project Anda dengan mengikuti link ini, lalu memilih project Anda dari daftar
- Di Cloud Log Explorer, Anda kini akan melihat pesan error yang menyatakan "FAILED_PRECONDITION: Konfigurasi indeks vektor tidak ada." Buat indeks yang diperlukan dengan perintah gcloud berikut: ..."
- Pesan error ini juga berisi perintah
gcloud
yang harus Anda jalankan untuk mengonfigurasi indeks yang hilang. - Jalankan perintah berikut dari command line Anda. Jika
gcloud
CLI belum terinstal di komputer Anda, ikuti petunjuk di sini untuk menginstalnya.
Pembuatan indeks memerlukan waktu beberapa menit. Anda dapat memeriksa progresnya pada tab Indexes di bagian Firestore pada Firebase console.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
- Setelah indeks disiapkan, Anda dapat membuat dokumen kueri baru.
- Sekarang Anda dapat melihat daftar ID dokumen yang cocok di kolom hasil
- Salin salah satu ID tersebut, dan kembali ke koleksi
notes
. - Gunakan ⌘+F untuk menelusuri ID dokumen yang Anda salin - dokumen ini adalah dokumen yang paling cocok dengan kueri Anda.
7. Mengimplementasikan penelusuran semantik
Akhirnya tiba waktunya untuk menghubungkan aplikasi seluler Anda ke ekstensi Vector Search dengan Firestore dan menerapkan fitur penelusuran semantik yang akan memungkinkan pengguna Anda menelusuri catatan mereka menggunakan kueri bahasa alami.
Menghubungkan fungsi callable untuk menjalankan kueri
Ekstensi Vector Search dengan Firestore menyertakan Cloud Function yang dapat Anda panggil dari aplikasi seluler untuk membuat kueri indeks yang Anda buat sebelumnya di codelab ini. Pada langkah ini, Anda akan membuat koneksi antara aplikasi seluler dan fungsi callable ini. Swift SDK Firebase menyertakan API yang membuat panggilan fungsi jarak jauh menjadi lancar.
- Kembali ke Xcode, dan pastikan Anda berada dalam project yang di-clone pada langkah sebelumnya di codelab ini.
- Buka file
NotesRepository.swift
. - Temukan baris yang berisi
private lazy var vectorSearchQueryCallable: Callable
= functions.httpsCallable("")
Untuk memanggil Cloud Function callable, Anda harus memberikan nama fungsi yang ingin dipanggil.
- Buka Firebase console untuk project Anda, lalu buka item menu Functions di bagian Build.
- Anda akan melihat daftar fungsi yang telah diinstal oleh ekstensi.
- Telusuri objek yang bernama
ext-firestore-vector-search-queryCallable
, lalu salin namanya. - Tempelkan nama tersebut ke dalam kode Anda. Sekarang seharusnya
private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
Memanggil fungsi kueri
- Temukan metode
performQuery
- Memanggil fungsi callable Anda dengan memanggil
let result = try await vectorSearchQueryCallable(searchTerm)
Karena ini adalah panggilan jarak jauh, panggilan ini mungkin gagal.
- Tambahkan beberapa penanganan error dasar untuk menangkap error dan mencatatnya ke konsol Xcode.
private func performQuery(searchTerm: String) async -> [String] { do { let result = try await vectorSearchQueryCallable(searchTerm) return [result] } catch { print(error.localizedDescription) return [] } }
Menghubungkan UI
Untuk memungkinkan pengguna menelusuri catatan mereka, Anda akan menerapkan kotak penelusuran di layar daftar catatan. Saat pengguna mengetik istilah penelusuran, Anda perlu memanggil metode performQuery
yang diterapkan pada langkah sebelumnya. Berkat pengubah tampilan searchable
dan task
yang disediakan oleh SwiftUI, hal ini hanya memerlukan beberapa baris kode.
- Pertama, buka
NotesListScreen.swift
- Untuk menambahkan kotak penelusuran ke tampilan daftar, tambahkan pengubah tampilan
.searchable(text: $searchTerm, prompt: "Search")
tepat di atas baris.navigationTitle("Notes")
- Kemudian, panggil fungsi penelusuran dengan menambahkan kode berikut tepat di bawah ini:
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
Cuplikan kode ini memanggil metode semanticSearch
Anda secara asinkron. Dengan memberikan waktu tunggu 800 milidetik, Anda menginstruksikan pengubah tugas untuk men-debounce input pengguna sebesar 0,8 detik. Artinya, semanticSearch
hanya akan dipanggil setelah pengguna menjeda pengetikan selama lebih dari 0,8 detik.
Kode Anda sekarang akan terlihat seperti ini:
...
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")
...
Menjalankan aplikasi
- Tekan ⌘ + R (atau klik tombol Run) untuk meluncurkan aplikasi di Simulator iOS
- Anda akan melihat catatan yang sama dengan yang ditambahkan di aplikasi sebelumnya di codelab ini, serta catatan apa pun yang Anda tambahkan melalui Firebase console
- Anda akan melihat kolom penelusuran di bagian atas daftar Catatan.
- Ketik istilah yang muncul di salah satu dokumen yang ditambahkan. Sekali lagi, metode ini paling cocok untuk kueri semantik, seperti "Bagaimana cara memanggil API Firebase asinkron dari Swift" (memberikan setidaknya satu catatan yang Anda tambahkan berisi teks yang membahas topik ini).
- Anda mungkin berharap melihat hasil penelusuran, tetapi sebaliknya, tampilan daftar kosong, dan konsol Xcode menampilkan pesan error: "The function was called with an invalid argument" (Fungsi dipanggil dengan argumen yang tidak valid)
Ini berarti Anda mengirim data dalam format yang salah.
Menganalisis pesan error
- Untuk mencari tahu apa yang salah, buka Firebase console
- Buka bagian Functions
- Temukan fungsi
ext-firestore-vector-search-queryCallable
, buka menu tambahan dengan mengklik tiga titik vertikal - Pilih View logs untuk membuka logs explorer
- Anda akan melihat error
Unhandled error ZodError: [
{
"code": "invalid_type",
"expected": "object",
"received": "string",
"path": [],
"message": "Expected object, received string"
}
]
Ini berarti Anda mengirim data dalam format yang salah.
Menggunakan jenis data yang benar
Untuk mengetahui format apa yang diharapkan oleh ekstensi untuk berada dalam format, lihat dokumentasi ekstensi.
- Buka bagian Ekstensi di Firebase console
- Klik Manage ->
- Di bagian Cara kerja ekstensi ini, Anda akan menemukan spesifikasi parameter input dan output.
- Kembali ke Xcode, dan buka
NotesRepository.swift
- Tambahkan kode berikut di awal file:
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
cocok dengan struktur parameter input yang diharapkan oleh ekstensi, sesuai dengan dokumentasi ekstensi. Atribut ini juga berisi atributprefilter
bertingkat yang akan Anda perlukan nanti.QueryResponse
cocok dengan struktur respons ekstensi. - Menemukan spesifikasi fungsi callable serta memperbarui jenis input dan output
private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
- Memperbarui pemanggilan fungsi callable di
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 [] } }
Menjalankan kembali aplikasi
- Menjalankan kembali aplikasi
- Ketik kueri penelusuran berisi istilah yang disertakan dalam salah satu catatan
- Sekarang Anda akan melihat daftar catatan yang difilter
Memfilter data pengguna terlebih dahulu
Sebelum Anda berdansa untuk merayakan - ada masalah dengan versi aplikasi saat ini: kumpulan hasil berisi data semua pengguna.
Anda dapat memverifikasi hal ini dengan menjalankan aplikasi pada simulator yang berbeda dan menambahkan lebih banyak dokumen. Dokumen baru hanya akan muncul di simulator tersebut. Jika Anda menjalankan aplikasi lagi di simulator lain, Anda hanya akan melihat dokumen yang Anda buat pertama kali.
Jika melakukan penelusuran, Anda akan melihat bahwa panggilan ke vectorSearchQueryCallable
menampilkan ID dokumen yang mungkin milik pengguna lain. Untuk mencegah hal ini, kita perlu menggunakan prefilter.
Di performQuery
, perbarui kode Anda sebagai berikut:
let prefilters: [QueryFilter] = if let uid = user?.uid {
[QueryFilter(field: "userId", operator: "==", value: uid)]
}
else {
[]
}
let queryRequest = QueryRequest(query: searchTerm,
limit: 2,
prefilters: prefilters)
Tindakan ini akan memfilter data terlebih dahulu berdasarkan ID pengguna yang login. Seperti yang mungkin Anda pikirkan, indeks Firestore harus diperbarui.
Jalankan perintah berikut dari command line untuk menentukan indeks Firestore baru yang menyertakan userId
dan embedding vektor di kolom 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
Setelah indeks selesai dibangun, jalankan lagi aplikasi untuk memverifikasi bahwa aplikasi berfungsi seperti yang diharapkan
8. Selamat
Selamat! Anda berhasil menyelesaikan codelab ini.
Dalam codelab ini, Anda telah mempelajari cara:
- Siapkan database Cloud Firestore dengan penelusuran semantik yang diaktifkan.
- Membuat aplikasi SwiftUI sederhana untuk berinteraksi dengan database.
- Implementasikan kotak penelusuran menggunakan pengubah tampilan yang dapat ditelusuri SwiftUI dan pengubah tugas.
- Panggil Cloud Function untuk melakukan penelusuran semantik pada database, menggunakan antarmuka Callable SDK Firestore.
Dengan pengetahuan yang diperoleh dalam codelab ini, Anda kini dapat membangun aplikasi canggih yang memanfaatkan kemampuan penelusuran semantik Cloud Firestore untuk memberikan pengalaman penelusuran yang lebih intuitif dan efisien kepada pengguna.
Untuk mempelajari lebih lanjut kolom vektor baru Firestore dan cara menghitung embedding vektor, baca dokumentasi.