1. Ringkasan
Dalam codelab ini, Anda akan mempelajari cara menambahkan fitur penelusuran yang canggih ke aplikasi menggunakan penelusuran kesamaan vektor Firestore. Anda akan menerapkan fitur penelusuran semantik untuk aplikasi pencatat yang ditulis dalam Swift dan SwiftUI.
Yang akan Anda pelajari
- Cara menginstal ekstensi Penelusuran Vektor dengan Firestore untuk menghitung embedding vektor.
- Cara memanggil Firebase Cloud Functions dari aplikasi Swift.
- Cara memfilter data sebelumnya berdasarkan pengguna yang login.
Yang akan Anda butuhkan
- Xcode 15.3
- Kode contoh codelab. Anda akan mendownloadnya di langkah selanjutnya dalam codelab ini.
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 console menggunakan Akun Google Anda.
- Klik tombol untuk membuat project baru, lalu masukkan nama project (misalnya,
Firestore Vector Search Codelab
).
- Klik Lanjutkan.
- Jika diminta, tinjau dan setujui persyaratan Firebase, lalu klik Continue.
- (Opsional) Aktifkan bantuan AI di Firebase console (disebut "Gemini di Firebase").
- Untuk codelab ini, Anda tidak memerlukan Google Analytics, jadi nonaktifkan opsi Google Analytics.
- Klik Buat project, tunggu hingga project Anda disediakan, lalu klik Lanjutkan.
Untuk mempelajari lebih lanjut project Firebase, lihat Memahami project Firebase.
Mengupgrade paket harga Firebase Anda
Untuk menggunakan Firebase Extensions dan layanan cloud yang mendasarinya, project Firebase Anda harus menggunakan paket harga bayar sesuai penggunaan (Blaze), yang berarti project tersebut ditautkan ke akun Penagihan Cloud.
- Akun Penagihan Cloud memerlukan metode pembayaran, seperti kartu kredit.
- Jika Anda baru menggunakan Firebase dan Google Cloud, periksa apakah Anda memenuhi syarat untuk mendapatkan kredit sebesar$300 dan akun Penagihan Cloud Uji Coba Gratis.
- Jika Anda melakukan codelab ini sebagai bagian dari acara, tanyakan kepada penyelenggara apakah ada kredit Cloud yang tersedia.
Untuk mengupgrade project Anda ke paket Blaze, ikuti langkah-langkah berikut:
- Di Firebase console, pilih upgrade your plan.
- Pilih paket Blaze. Ikuti petunjuk di layar untuk menautkan akun Penagihan Cloud ke project Anda.
Jika perlu membuat akun Penagihan Cloud sebagai bagian dari upgrade ini, Anda mungkin perlu kembali ke alur upgrade di Firebase console untuk menyelesaikan upgrade.
Mengaktifkan dan menyiapkan produk Firebase di konsol
Aplikasi yang Anda build 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 perlu 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. Hal ini menghasilkan proses aktivasi yang lancar. Untuk mempelajari lebih lanjut autentikasi anonim (dan cara mengupgrade ke akun bernama), lihat Praktik Terbaik untuk autentikasi anonim.
- Di panel sisi kiri Firebase console, klik Build > Authentication. Kemudian, klik Mulai.
- Sekarang Anda berada di dasbor Authentication, tempat Anda dapat melihat pengguna yang mendaftar, mengonfigurasi penyedia login, dan mengelola setelan.
- Pilih tab Sign-in method (atau klik di sini untuk langsung membuka tab).
- 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 cara menyiapkan Cloud Firestore di project Firebase Anda:
- Di panel kiri Firebase console, luaskan Build, lalu pilih Firestore database.
- Klik Create database.
- Biarkan Database ID ditetapkan ke
(default)
. - Pilih lokasi untuk database Anda, lalu klik Berikutnya.
Untuk aplikasi yang sebenarnya, Anda harus memilih lokasi yang dekat dengan pengguna. - Klik Mulai dalam mode pengujian. Baca pernyataan penyangkalan tentang aturan keamanan.
Di codelab ini, Anda akan menambahkan Aturan Keamanan untuk mengamankan data. Jangan mendistribusikan atau mengekspos aplikasi ke publik tanpa menambahkan Aturan Keamanan untuk database Anda. - Klik Buat.
Menyiapkan Cloud Storage for Firebase
Aplikasi web menggunakan Cloud Storage for Firebase untuk menyimpan, mengupload, dan membagikan gambar.
Berikut cara menyiapkan Cloud Storage for Firebase di project Firebase Anda:
- Di panel kiri Firebase console, luaskan Build, lalu pilih Storage.
- Klik Get started.
- Pilih lokasi untuk bucket Storage default Anda.
Bucket diUS-WEST1
,US-CENTRAL1
, danUS-EAST1
dapat memanfaatkan paket"Selalu Gratis" untuk Google Cloud Storage. Bucket di semua lokasi lainnya mengikuti harga dan penggunaan Google Cloud Storage. - Klik Mulai dalam mode pengujian. Baca pernyataan penyangkalan tentang aturan keamanan.
Di codelab ini, Anda akan menambahkan aturan keamanan untuk mengamankan data. Jangan mendistribusikan atau mengekspos aplikasi ke publik tanpa menambahkan Aturan Keamanan untuk bucket Storage Anda. - Klik Buat.
3. Menghubungkan aplikasi seluler
Di bagian codelab ini, Anda akan mendownload kode sumber untuk aplikasi pencatat sederhana, dan menghubungkannya ke project Firebase yang baru saja Anda buat.
Unduh aplikasi contoh
- Buka https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios, lalu clone repositori ke komputer lokal Anda
- Buka project Notes.xcodeproj di Xcode
Menghubungkan aplikasi ke project Firebase Anda
Agar aplikasi Anda dapat mengakses layanan Firebase, Anda harus menyiapkan aplikasi 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 lebih lanjut project Firebase, lihat 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 mau, 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 project Xcode Anda. Cara yang baik untuk melakukannya adalah dengan meletakkannya di bawah file Assets.xcassets.
- Pilih Copy items if needed, pastikan target Notes dipilih di Add to targets, lalu klik Finish.
- Di Firebase console, Anda kini dapat mengklik proses penyiapan lainnya: sampel yang Anda download di awal bagian ini sudah menginstal Firebase Apple SDK, dan penyiapan inisialisasi. Anda dapat menyelesaikan proses dengan mengklik Lanjutkan ke konsol.
Menjalankan aplikasi
Sekarang saatnya mencoba aplikasi.
- Kembali di Xcode, jalankan aplikasi di iOS Simulator. Di 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 penjelajah data Firestore, sehingga Anda dapat melihat dokumen baru yang dibuat saat Anda menambahkan catatan baru di aplikasi.
4. Menginstal ekstensi Vector Search dengan Firestore
Di bagian codelab ini, Anda akan menginstal ekstensi Penelusuran Vektor dengan Firestore, dan mengonfigurasinya sesuai persyaratan aplikasi pencatat yang sedang Anda kerjakan.
Mulai menginstal ekstensi
- Masih di bagian Firestore, klik tab Extensions.
- Klik Jelajahi Extensions Hub.
- Ketik "vektor".
- Klik "Vector Search with Firestore extension".
Tindakan ini akan mengarahkan Anda ke halaman detail ekstensi, tempat Anda dapat membaca lebih lanjut tentang ekstensi, cara kerjanya, layanan Firebase yang diperlukan, dan cara mengonfigurasinya.
- Klik Install in Firebase console.
- Anda akan melihat daftar semua project Anda.
- Pilih project yang Anda buat pada langkah pertama codelab ini.
Mengonfigurasi ekstensi
- Tinjau API yang diaktifkan dan resource yang dibuat.
- Aktifkan layanan yang diperlukan.
- Setelah semua layanan diaktifkan, klik Berikutnya.
- Tinjau akses yang diberikan untuk ekstensi ini.
- Konfigurasi ekstensi:
- Pilih Vertex AI sebagai LLM
- Jalur pengumpulan: catatan
- Batas kueri default: 3
- Nama kolom input: text
- Nama kolom output: embedding
- Nama kolom status:* *status*
- Menyematkan dokumen yang ada: Ya
- Perbarui dokumen yang ada: Ya
- Lokasi Cloud Function: us-central1
- Klik Instal ekstensi untuk menyelesaikan penginstalan.
Proses ini mungkin memerlukan waktu beberapa menit. Saat Anda menunggu penyelesaian penginstalan, silakan lanjutkan ke bagian tutorial berikutnya dan baca beberapa informasi latar belakang tentang penyematan vektor.
5. Latar belakang
Saat Anda menunggu penginstalan selesai, berikut beberapa informasi latar belakang tentang cara kerja ekstensi Penelusuran Vektor dengan Firestore.
Apa itu Vektor, Embedding, dan Database Vektor?
- Vektor adalah objek matematika yang merepresentasikan magnitudo dan arah suatu kuantitas. Dimensi dapat digunakan untuk merepresentasikan data dengan cara yang memudahkan perbandingan dan penelusuran.
- Embedding adalah vektor yang merepresentasikan makna kata atau frasa. Embedding 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. Indeks ini memungkinkan penelusuran tetangga terdekat yang efisien, yaitu proses menemukan vektor yang paling mirip dengan vektor kueri tertentu.
Bagaimana cara kerja Penelusuran Vektor?
Penelusuran vektor berfungsi dengan membandingkan vektor kueri dengan semua vektor dalam database. Vektor yang paling mirip dengan vektor kueri akan ditampilkan sebagai hasil penelusuran.
Kemiripan 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 ekstensi Penelusuran Vektor dengan Firestore
Sebelum menggunakan Vector Search dengan ekstensi Firestore di aplikasi iOS yang Anda download sebelumnya dalam codelab ini, Anda dapat mencoba ekstensi di Firebase console.
Baca dokumentasi
Firebase Extensions menyertakan dokumentasi tentang cara kerjanya.
- Setelah penginstalan ekstensi selesai, klik tombol Mulai.
- Lihat tab "Cara kerja ekstensi ini" - tab ini menjelaskan:
- cara menghitung sematan untuk dokumen dengan menambahkannya ke koleksi
notes
, - cara membuat kueri indeks dengan memanggil fungsi yang dapat dipanggil
ext-firestore-vector-search-queryCallable
, - atau cara membuat kueri indeks dengan menambahkan dokumen kueri ke koleksi
_firestore-vector-search/index/queries
. - Dokumen ini juga menjelaskan cara menyiapkan fungsi embedding kustom. Hal ini berguna jika tidak ada LLM yang didukung oleh ekstensi yang memenuhi persyaratan Anda, dan Anda ingin menggunakan LLM lain untuk menghitung embedding.
- cara menghitung sematan untuk dokumen dengan menambahkannya ke koleksi
- Klik link dasbor Cloud Firestore untuk membuka instance Firestore Anda
- Buka dokumen
_firestore-vector-search/index
. Bagian ini akan menunjukkan bahwa ekstensi telah selesai menghitung embedding untuk semua dokumen catatan yang Anda buat pada langkah sebelumnya dalam codelab ini. - Untuk memverifikasinya, buka salah satu dokumen catatan, dan Anda akan melihat kolom tambahan bernama
embedding
dengan jenisvector<768>
, serta kolomstatus
.
Membuat contoh dokumen
Anda dapat membuat dokumen baru di Firebase console untuk melihat cara kerja ekstensi.
- Masih di penjelajah data Firestore, buka koleksi
notes
, lalu klik + Add document di kolom tengah. - Klik Auto-ID untuk membuat ID dokumen unik baru.
- Tambahkan kolom bernama
text
berjenis string, lalu tempelkan beberapa teks ke kolom value. Penting agar ini bukan lorem ipsum atau teks acak lainnya. Pilih artikel berita, misalnya. - Klik Simpan.
- Perhatikan bagaimana ekstensi menambahkan kolom status untuk menunjukkan bahwa ekstensi sedang memproses data.
- Setelah beberapa saat, Anda akan melihat kolom baru
embedding
dengan nilaivector<768>
.
Melakukan kueri
Ekstensi Vector Search dengan Firestore memiliki fitur kecil yang memungkinkan Anda membuat kueri indeks dokumen tanpa harus menghubungkan aplikasi.
- Di bagian Firestore pada Firebase console, buka dokumen
_firestore-vector-search/index
- Klik + Start collection
- Buat subkoleksi baru bernama
queries
- Buat dokumen baru dan tetapkan kolom
query
ke teks yang ada di salah satu dokumen Anda. Cara ini paling efektif untuk kueri semantik, seperti "Bagaimana cara memetakan dokumen Firestore dengan Swift" (asalkan setidaknya salah satu catatan yang Anda tambahkan berisi teks yang membahas topik ini). - Anda mungkin melihat error di status
- Hal ini disebabkan oleh indeks yang tidak ada. Untuk menyiapkan konfigurasi indeks yang tidak ada, buka konsol Google Cloud untuk project Anda dengan mengikuti link ini, lalu pilih project Anda dari daftar
- Di Cloud Log Explorer, Anda akan melihat pesan error yang bertuliskan "FAILED_PRECONDITION: Missing vector index configuration. Buat indeks yang diperlukan dengan perintah gcloud berikut: ..."
- Pesan error juga berisi perintah
gcloud
yang perlu Anda jalankan untuk mengonfigurasi indeks yang tidak ada. - Jalankan perintah berikut dari command line Anda. Jika Anda belum menginstal
gcloud
CLI di komputer, ikuti petunjuk di sini untuk menginstalnya. Pembuatan indeks memerlukan waktu beberapa menit. Anda dapat memeriksa progres di tab Indeks 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 akan melihat daftar ID dokumen yang cocok di kolom hasil
- Salin salah satu ID tersebut, lalu kembali ke koleksi
notes
. - Gunakan ⌘+F untuk menelusuri ID dokumen yang Anda salin - dokumen ini adalah dokumen yang paling cocok dengan kueri Anda.
7. Menerapkan penelusuran semantik
Akhirnya, saatnya menghubungkan aplikasi seluler Anda ke ekstensi Vector Search dengan Firestore dan menerapkan fitur penelusuran semantik yang akan memungkinkan pengguna menelusuri catatan mereka menggunakan kueri bahasa alami.
Menghubungkan fungsi callable untuk melakukan kueri
Ekstensi Vector Search dengan Firestore menyertakan Cloud Function yang dapat Anda panggil dari aplikasi seluler untuk mengkueri indeks yang Anda buat sebelumnya dalam 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 di project yang Anda clone di langkah sebelumnya dalam codelab ini.
- Buka file
NotesRepository.swift
. - Temukan baris yang berisi
private lazy var vectorSearchQueryCallable: Callable
= functions.httpsCallable("")
Untuk memanggil Cloud Function yang dapat dipanggil, 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 yang bernama
ext-firestore-vector-search-queryCallable
, lalu salin namanya. - Tempelkan nama ke dalam kode Anda. Sekarang akan tertulis
private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
Panggil fungsi kueri
- Temukan metode
performQuery
- Panggil 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 mengizinkan pengguna menelusuri catatan mereka, Anda akan menerapkan kotak penelusuran di layar daftar catatan. Saat pengguna mengetik istilah penelusuran, Anda perlu memanggil metode performQuery
yang Anda terapkan di 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 bawahnya:
.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 melakukan penghilangan getaran input pengguna selama 0,8 detik. Artinya, semanticSearch
hanya akan dipanggil setelah pengguna menjeda pengetikan selama lebih dari 0,8 detik.
Sekarang kode Anda 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 yang Anda tambahkan di aplikasi sebelumnya dalam codelab ini, serta catatan 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 Anda tambahkan. Sekali lagi, cara ini paling efektif untuk kueri semantik, seperti "Bagaimana cara memanggil Firebase API asinkron dari Swift" (asalkan setidaknya salah satu catatan yang Anda tambahkan berisi teks yang membahas topik ini).
- Anda mungkin berharap melihat hasil penelusuran, tetapi tampilan daftar kosong, dan konsol Xcode menampilkan pesan error: "The function was called with an invalid argument" (Fungsi dipanggil dengan argumen yang tidak valid)
Artinya, Anda mengirim data dalam format yang salah.
Menganalisis pesan error
- Untuk mengetahui 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 Lihat log untuk membuka Logs Explorer
- Anda akan melihat error
Unhandled error ZodError: [
{
"code": "invalid_type",
"expected": "object",
"received": "string",
"path": [],
"message": "Expected object, received string"
}
]
Artinya, Anda mengirim data dalam format yang salah.
Menggunakan jenis data yang benar
Untuk mengetahui format yang diharapkan ekstensi untuk parameter, lihat dokumentasi ekstensi.
- Buka bagian Extensions di Firebase console
- Klik Kelola ->
- Di bagian Cara kerja ekstensi ini, Anda akan menemukan spesifikasi parameter input dan output.
- Kembali ke Xcode, lalu 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 ekstensi, sesuai dengan dokumentasi ekstensi. Objek ini juga berisi atributprefilter
bertingkat yang akan Anda perlukan nanti.QueryResponse
cocok dengan struktur respons ekstensi. - Temukan spesifikasi fungsi yang dapat dipanggil dan perbarui jenis input dan output
private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
- Perbarui 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 [] } }
Jalankan aplikasi lagi
- Jalankan aplikasi lagi
- Ketik kueri penelusuran yang berisi istilah yang disertakan dalam salah satu catatan Anda
- Anda sekarang akan melihat daftar catatan yang difilter
Memfilter data pengguna terlebih dahulu
Sebelum Anda menari untuk merayakan - ada masalah dengan versi aplikasi saat ini: set hasil berisi data dari semua pengguna.
Anda dapat memverifikasinya dengan menjalankan aplikasi di simulator lain 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 prafilter.
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 Anda duga, tindakan ini memerlukan pembaruan indeks Firestore.
Jalankan perintah berikut dari command line untuk menentukan indeks Firestore baru yang mencakup userId
dan sematan 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 pembuatan indeks selesai, jalankan aplikasi lagi 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.
- Buat aplikasi SwiftUI sederhana untuk berinteraksi dengan database.
- Terapkan kotak penelusuran menggunakan pengubah tampilan yang dapat ditelusuri dan pengubah tugas SwiftUI.
- Panggil Cloud Function untuk melakukan penelusuran semantik di database, menggunakan antarmuka Callable Firestore SDK.
Dengan pengetahuan yang Anda peroleh 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, lihat dokumentasi.