Menambahkan Firestore Vector Search ke aplikasi seluler Anda dengan Firebase Extensions

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.

Konsol Cloud Firestore menampilkan beberapa dokumen, yang juga terlihat di aplikasi iOS di sisi kanan.

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

  1. Login ke Firebase
  2. Di Firebase console, klik Add project, lalu beri nama project Anda dengan Firestore Vector Search LabMembuat project, langkah 1 dari 3: memilih nama project
  3. Klik opsi pembuatan project. Setujui persyaratan Firebase jika diminta.
  4. Di layar Google Analytics, hapus centang kotak Aktifkan Google Analytics untuk project ini, karena Anda tidak akan menggunakan Analytics untuk aplikasi ini.
  5. 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.

  1. Di panel sebelah kiri Firebase console, klik Build > Authentication. Lalu, klik Mulai.Mengaktifkan Firebase Autentication
  2. Anda kini berada di dasbor Authentication, tempat Anda dapat melihat pengguna yang mendaftar, mengonfigurasi penyedia login, dan mengelola setelan.
  3. Pilih tab Metode login (atau klik di sini untuk langsung membuka tab tersebut).
  4. 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:

  1. Di panel sebelah kiri Firebase console, klik Build > Firestore Database. Kemudian klik Create database.Mengaktifkan Cloud Firestore
  2. 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.
  3. Pilih opsi Mulai dalam mode pengujian. Baca pernyataan penyangkalan tentang aturan keamanan. Mode pengujian memastikan Anda dapat menulis ke database dengan bebas selama pengembangan.Menyiapkan Aturan Keamanan untuk Firestore dalam mode pengujian
  4. 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

  1. Buka https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios, dan clone repositori ke mesin lokal Anda
  2. 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.

  1. Di Firebase console, buka halaman ringkasan project Firebase Anda.Halaman ringkasan Firebase console
  2. Klik ikon iOS+ untuk menambahkan aplikasi iOS Anda.
  3. Di layar Add Firebase to your Apple app, masukkan ID paket dari project Xcode (com.google.firebase.codelab.Notes).
  4. Jika berkenan, Anda dapat memasukkan nama panggilan aplikasi (Catatan untuk iOS).
  5. Klik Register app untuk melanjutkan ke langkah berikutnya.
  6. Download file GoogleServices-Info.plist.
  7. Tarik GoogleServices-Info.plist ke folder Notes di project Xcode Anda. Cara yang tepat untuk melakukannya adalah dengan menaruhnya di bawah file Assets.xcassets.Menarik file plist ke Xcode
  8. Pilih Copy items if needed, pastikan target Notes dipilih di opsi Add to targets, lalu klik Finish.Memilih “Salin jika diperlukan” di dialog pilih opsi untuk menambahkan file
  9. 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!

  1. Kembali ke Xcode, jalankan aplikasi di Simulator iOS. Di menu drop-down Run Destinations, pilih salah satu Simulator iOS terlebih dahulu.Memilih Simulator iOS di drop-down Run Destinations
  2. Kemudian, klik tombol Run, atau tekan ⌘ + R
  3. Setelah aplikasi berhasil diluncurkan di Simulator, tambahkan beberapa catatan.
  4. Di Firebase console, buka browser data Firestore, sehingga Anda dapat melihat dokumen baru yang sedang dibuat saat menambahkan catatan baru di aplikasi.Konsol Cloud Firestore menampilkan beberapa dokumen, beserta Simulator iOS yang menampilkan dokumen yang sama

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

  1. Masih di bagian Firestore, klik tab Extensions.Memilih tab Firebase Extensions di Firestore console
  2. Klik Explore Extensions Hub.Tab Firebase Extensions di Firestore console
  3. Ketik "vektor".
  4. Klik "Vector Search dengan ekstensi Firestore".Halaman landing Firebase Extensios Hub Anda akan diarahkan ke halaman detail ekstensi, tempat Anda dapat membaca ekstensi lebih lanjut, cara kerjanya, layanan Firebase yang diperlukan, dan cara mengonfigurasinya.
  5. Klik Install in Firebase console.Tombol instal untuk ekstensi Vector Search dengan Firestore
  6. Anda akan melihat daftar semua project.
  7. Pilih project yang Anda buat pada langkah pertama codelab ini.Layar pemilih project Firebase

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.

  1. Klik Upgrade project untuk melanjutkan. Mengupgrade project ke paket Blaze
  2. Pilih akun penagihan yang sudah ada, atau buat akun baru. Klik continue.Memilih akun penagihan
  3. Tetapkan anggaran (misalnya 10 USD), klik Lanjutkan, lalu klik Beli.Menyiapkan anggaran
  4. Tinjau API yang diaktifkan dan resource yang dibuat.Meninjau API yang diaktifkan
  5. Aktifkan layanan yang diperlukan.Mengaktifkan layanan yang diperlukan
  6. Saat mengaktifkan Cloud Storage, pilih test mode untuk aturan keamanan.
  7. Pastikan Cloud Storage akan menggunakan lokasi yang sama dengan instance Cloud Firestore Anda.
  8. Setelah semua layanan diaktifkan, klik Next.Klik berikutnya setelah mengaktifkan semua layanan
  9. Tinjau akses yang diberikan untuk ekstensi ini.
  10. 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
  11. 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.

  1. Setelah ekstensi selesai diinstal, klik tombol Mulai. Halaman ringkasan Firebase Extensions di Firebase console
  2. 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. Dokumentasi untuk ekstensi Vector Search dengan Firestore
  3. Klik link dasbor Cloud Firestore untuk membuka instance Firestore Anda
  4. 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.Konfigurasi indeks di dalam konsol Firestore
  5. Untuk memverifikasi hal ini, buka salah satu dokumen catatan, dan Anda akan melihat kolom tambahan bernama embedding dari jenis vector<768>, serta kolom status.Kolom embedding vektor di dalam konsol Firestore

Membuat dokumen contoh

Anda dapat membuat dokumen baru di Firebase console untuk melihat cara kerja ekstensi.

  1. Masih di browser data Firestore, buka koleksi notes, lalu klik + Add document di kolom tengah.Menambahkan dokumen baru
  2. Klik ID Otomatis untuk membuat ID dokumen unik yang baru.
  3. 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.Menambahkan kolom teks
  4. 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 nilai vector<768>.
    Pembaruan status embedding vektor untuk dokumen baru

Menjalankan kueri

Ekstensi Vector Search dengan Firestore memiliki fitur kecil bagus yang memungkinkan Anda membuat kueri indeks dokumen tanpa harus menghubungkan aplikasi.

  1. Di bagian Firestore pada Firebase console, buka dokumen _firestore-vector-search/index
  2. Klik + Mulai pengumpulanMenambahkan subkoleksi baru
  3. Buat subkoleksi baru bernama queries
  4. 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).Menambahkan {i>field<i} kueri
  5. Anda mungkin melihat error dalam statusTerjadi error
  6. 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 daftarMemilih proyek yang tepat
  7. 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 di penjelajah log
  8. Pesan error ini juga berisi perintah gcloud yang harus Anda jalankan untuk mengonfigurasi indeks yang hilang.
  9. Jalankan perintah berikut dari command line Anda. Jika gcloud CLI belum terinstal di komputer Anda, ikuti petunjuk di sini untuk menginstalnya.
    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
    
    Pembuatan indeks memerlukan waktu beberapa menit. Anda dapat memeriksa progresnya pada tab Indexes di bagian Firestore pada Firebase console.Status indeks baru
  10. Setelah indeks disiapkan, Anda dapat membuat dokumen kueri baru.
  11. Sekarang Anda dapat melihat daftar ID dokumen yang cocok di kolom hasilHasil menjalankan kueri semantik
  12. Salin salah satu ID tersebut, dan kembali ke koleksi notes.
  13. Gunakan ⌘+F untuk menelusuri ID dokumen yang Anda salin - dokumen ini adalah dokumen yang paling cocok dengan kueri Anda.Menemukan ID dokumen dalam daftar dokumen

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.

  1. Kembali ke Xcode, dan pastikan Anda berada dalam project yang di-clone pada langkah sebelumnya di codelab ini.
  2. Buka file NotesRepository.swift.
  3. Temukan baris yang berisi private lazy var vectorSearchQueryCallable: Callable = functions.httpsCallable("")

Untuk memanggil Cloud Function callable, Anda harus memberikan nama fungsi yang ingin dipanggil.

  1. Buka Firebase console untuk project Anda, lalu buka item menu Functions di bagian Build.
  2. Anda akan melihat daftar fungsi yang telah diinstal oleh ekstensi.
  3. Telusuri objek yang bernama ext-firestore-vector-search-queryCallable, lalu salin namanya.
  4. 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

  1. Temukan metode performQuery
  2. Memanggil fungsi callable Anda dengan memanggil
    let result = try await vectorSearchQueryCallable(searchTerm)
    

Karena ini adalah panggilan jarak jauh, panggilan ini mungkin gagal.

  1. 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.

  1. Pertama, buka NotesListScreen.swift
  2. Untuk menambahkan kotak penelusuran ke tampilan daftar, tambahkan pengubah tampilan .searchable(text: $searchTerm, prompt: "Search") tepat di atas baris .navigationTitle("Notes")
  3. 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

  1. Tekan ⌘ + R (atau klik tombol Run) untuk meluncurkan aplikasi di Simulator iOS
  2. 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
  3. Anda akan melihat kolom penelusuran di bagian atas daftar Catatan.
  4. 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).
  5. 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)

Aplikasi Notes, dengan daftar hasil kosong

Ini berarti Anda mengirim data dalam format yang salah.

Menganalisis pesan error

  1. Untuk mencari tahu apa yang salah, buka Firebase console
  2. Buka bagian Functions
  3. Temukan fungsi ext-firestore-vector-search-queryCallable, buka menu tambahan dengan mengklik tiga titik vertikal
  4. Pilih View logs untuk membuka logs explorer
  5. 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.

  1. Buka bagian Ekstensi di Firebase console
  2. Klik Manage ->Mengelola Vector Search dengan ekstensi Firestore
  3. Di bagian Cara kerja ekstensi ini, Anda akan menemukan spesifikasi parameter input dan output.Dokumentasi parameter input dan nilai hasil
  4. Kembali ke Xcode, dan buka NotesRepository.swift
  5. 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 atribut prefilter bertingkat yang akan Anda perlukan nanti.QueryResponse cocok dengan struktur respons ekstensi.
  6. Menemukan spesifikasi fungsi callable serta memperbarui jenis input dan output
    private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
    
  7. 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

  1. Menjalankan kembali aplikasi
  2. Ketik kueri penelusuran berisi istilah yang disertakan dalam salah satu catatan
  3. Sekarang Anda akan melihat daftar catatan yang difilter

Screenshot aplikasi dengan hasil yang diharapkan

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

Kumpulan hasil yang telah difilter

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.