1. Genel Bakış
Bu codelab'de, Firestore vektör benzerliği aramasını kullanarak uygulamanıza güçlü arama özelliklerini nasıl ekleyeceğinizi öğreneceksiniz. Swift ve SwiftUI ile yazılmış bir not alma uygulaması için semantik arama özelliğini uygulayacaksınız.
Öğrenecekleriniz
- Vektör yerleştirmelerini hesaplamak için Firestore ile Vektör Arama uzantısı nasıl yüklenir?
- Swift uygulamasından Firebase Cloud Functions'ı çağırma.
- Oturum açmış kullanıcıya göre verileri ön filtreleme
İhtiyacınız olanlar
- Xcode 15.3
- Codelab örnek kodu. Bu dosyayı, kod laboratuvarının sonraki bir adımında indirirsiniz.
2. Firebase projesi oluşturup ayarlama
Firebase Vector Search uzantısını kullanmak için Firebase projesi gerekir. Codelab'in bu bölümünde yeni bir Firebase projesi oluşturup Cloud Firestore ve Firebase Authentication gibi gerekli hizmetleri etkinleştireceksiniz.
Firebase projesi oluşturma
- Firebase'de oturum açın.
- Firebase konsolunda Proje ekle'yi tıklayın, ardından projenizi Firestore Vektör Arama Laboratuvarı olarak adlandırın
- Proje oluşturma seçeneklerini tıklayarak ilerleyin. İstenirse Firebase şartlarını kabul edin.
- Bu uygulama için Analytics'i kullanmayacağınız için Google Analytics ekranında Bu proje için Google Analytics'i etkinleştir kutusunun işaretini kaldırın.
- Son olarak Proje oluştur'u tıklayın.
Firebase projeleri hakkında daha fazla bilgi edinmek için Firebase projelerini anlama başlıklı makaleyi inceleyin.
Firebase fiyatlandırma planınızı yükseltme
Firebase Extensions'i ve temel bulut hizmetlerini kullanmak için Firebase projenizin kullan-öde (Blaze) fiyatlandırma planında olması gerekir. Yani projeniz bir Cloud Faturalandırma hesabına bağlı olmalıdır.
- Cloud Billing hesabı için kredi kartı gibi bir ödeme yöntemi gerekir.
- Firebase ve Google Cloud'da yeniyseniz 300 ABD doları kredi ve ücretsiz deneme Cloud faturalandırma hesabı almaya uygun olup olmadığınızı kontrol edin.
- Bu codelab'i bir etkinliğin parçası olarak gerçekleştiriyorsanız düzenleyen kişiye, kullanılabilir Cloud kredisi olup olmadığını sorun.
Projenizi Blaze planına yükseltmek için aşağıdaki adımları uygulayın:
- Firebase konsolunda planınızı yükseltmeyi seçin.
- Blaze planını seçin. Projenize bir Cloud Faturalandırma hesabı bağlamak için ekrandaki talimatları uygulayın.
Bu yükseltme kapsamında bir Cloud Faturalandırma hesabı oluşturmanız gerekiyorsa yükseltmeyi tamamlamak için Firebase Console'daki yükseltme akışına geri dönmeniz gerekebilir.
Konsolda Firebase ürünlerini etkinleştirin ve ayarlayın
Geliştirdiğiniz uygulama, Apple uygulamaları için kullanılabilen çeşitli Firebase ürünlerini kullanıyor:
- Kullanıcılarınızın uygulamanızda kolayca oturum açmasına olanak tanımak için Firebase Authentication'i kullanın.
- Yapılandırılmış verileri bulutta depolamak ve veriler değiştiğinde anında bildirim almak için Cloud Firestore'u kullanın.
- Firebase Güvenlik Kuralları'nı kullanarak veritabanınızın güvenliğini sağlayın.
Bu ürünlerin bazıları için özel yapılandırma veya Firebase Konsolu'nun kullanılması gerekir.
Firebase Authentication için anonim kimlik doğrulamayı etkinleştir
Bu uygulama, kullanıcıların önce hesap oluşturmak zorunda kalmadan uygulamayı kullanmaya başlamasına olanak tanımak için anonim kimlik doğrulamasını kullanır. Bu sayede ilk katılım süreci sorunsuz olur. Anonim kimlik doğrulama (ve adlandırılmış hesaba geçme) hakkında daha fazla bilgi edinmek için Anonim kimlik doğrulama için en iyi uygulamalar başlıklı makaleyi inceleyin.
- Firebase konsolunun sol tarafındaki panelde Build > Authentication'ı (Derleme > Kimlik Doğrulama) tıklayın. Ardından Başlayın'ı tıklayın.
- Şimdi, kayıtlı kullanıcıları görebileceğiniz, oturum açma sağlayıcılarını yapılandırabileceğiniz ve ayarları yönetebileceğiniz Kimlik Doğrulama kontrol panelindesiniz.
- Oturum açma yöntemi sekmesini seçin (veya doğrudan sekmeye gitmek için burayı tıklayın).
- Sağlayıcı seçeneklerinden Anonymous'i (Anonymous) tıklayın, anahtarı Enable (Etkinleştir) konumuna getirin ve ardından Save'i (Kaydet) tıklayın.
Cloud Firestore'u ayarlama
Bu Swift uygulaması not kaydetmek için Cloud Firestore'u kullanır.
Cloud Firestore'u Firebase projenizde ayarlamak için:
- Firebase konsolunun sol panelinde Derleme'yi genişletin ve ardından Firestore veritabanı'nı seçin.
- Create database'i (Veritabanı oluştur) tıklayın.
- Veritabanı Kimliği değerini
(default)
olarak bırakın. - Veritabanı için bir konum seçin ve Sonraki'yi tıklayın.
Gerçek bir uygulama için kullanıcılarınıza yakın bir konum seçmeniz gerekir. - Test modunda başlat'ı tıklayın. Güvenlik kurallarıyla ilgili sorumluluk reddi beyanını okuyun.
Bu kod laboratuvarının ilerleyen bölümlerinde, verilerinizin güvenliğini sağlamak için güvenlik kuralları ekleyeceksiniz. Veritabanınıza Güvenlik Kuralları eklemeden bir uygulamayı herkese açık şekilde dağıtmayın veya kullanıma açık hale getirmeyinyapmayın uygulamayı herkese açık olarak dağıtmayın veya kullanıma sunmayın. - Oluştur'u tıklayın.
Firebase için Cloud Storage'ı Ayarlama
Web uygulaması resimleri depolamak, yüklemek ve paylaşmak için Cloud Storage for Firebase'i kullanır.
Firebase projenizde Cloud Storage for Firebase'i ayarlamak için:
- Firebase konsolunun sol panelinde Derleme'yi genişletin ve ardından Depolama'yı seçin.
- Başlayın'ı tıklayın.
- Varsayılan Storage paketiniz için bir konum seçin.
US-WEST1
,US-CENTRAL1
veUS-EAST1
'deki paketler Google Cloud Storage'ın "Daima Ücretsiz" katmanından yararlanabilir. Diğer tüm konumlardaki paketler için Google Cloud Storage fiyatlandırması ve kullanımı geçerlidir. - Test modunda başlat'ı tıklayın. Güvenlik kurallarıyla ilgili sorumluluk reddi beyanını okuyun.
Bu kod laboratuvarının ilerleyen bölümlerinde, verilerinizin güvenliğini sağlamak için güvenlik kuralları ekleyeceksiniz. Depolama alanı paketiniz için Güvenlik Kuralları eklemedenbir uygulamayı dağıtmayın veya herkese açık olarak göstermeyin. - Oluştur'u tıklayın.
3. Mobil uygulamayı bağlama
Bu kod alanının bu bölümünde, basit bir not alma uygulamasının kaynak kodunu indirip yeni oluşturduğunuz Firebase projesine bağlayacaksınız.
Örnek uygulamayı indirin
- https://github.com/FirebaseExtended/codelab-firestore-vectorsearch-ios adresine gidin ve deposu yerel makinenize klonlayın
- Xcode'da Notes.xcodeproj projesini açın.
Uygulamayı Firebase projenize bağlayın
Uygulamanızın Firebase hizmetlerine erişebilmesi için Firebase konsolunda uygulamayı ayarlamanız gerekir. Aynı Firebase projesine birden fazla istemci uygulaması bağlayabilirsiniz. Örneğin, bir Android veya web uygulaması oluşturursanız bunları aynı Firebase projesine bağlamanız gerekir.
Firebase projeleri hakkında daha fazla bilgi edinmek için Firebase projelerini anlama başlıklı makaleyi inceleyin.
- Firebase konsolunda, Firebase projenizin genel bakış sayfasına gidin.
- iOS uygulamanızı eklemek için iOS+ simgesini tıklayın.
- Firebase'i Apple uygulamanıza ekleyin ekranında, Xcode projesindeki paket kimliğini (com.google.firebase.codelab.Notes) ekleyin.
- İsterseniz bir uygulama takma adı girebilirsiniz (iOS için Notlar).
- Sonraki adıma geçmek için Uygulamayı kaydet'i tıklayın.
- GoogleServices-Info.plist dosyasını indirin.
- GoogleServices-Info.plist dosyasını Xcode projenizin Notlar klasörüne sürükleyin. Bunu yapmanın iyi bir yolu, dosyayı Assets.xcassets dosyasının altına bırakmaktır.
- Gerekirse öğeleri kopyala'yı seçin, Hedeflere ekle bölümünde Notlar hedefinin seçildiğinden emin olun ve Son'u tıklayın.
- Firebase konsolunda, kurulum işleminin geri kalanını tıklayabilirsiniz: Bu bölümün başında indirdiğiniz örnekte Firebase Apple SDK'sı zaten yüklü ve ilklendirme ayarlanmıştır. Konsol'a devam'ı tıklayarak işlemi tamamlayabilirsiniz.
Uygulamayı çalıştırma
Artık uygulamayı deneme zamanı geldi.
- Xcode'a geri dönüp uygulamayı iOS simülatöründe çalıştırın. Çalıştırma Hedefleri açılır listesinde önce iOS simülasyon araçlarından birini seçin.
- Ardından, Çalıştır düğmesini tıklayın veya ⌘ + R tuşlarına basın.
- Uygulama Simülatör'de başarıyla başlatıldıktan sonra birkaç not ekleyin.
- Uygulamaya yeni notlar eklerken oluşturulan yeni dokümanları görmek için Firebase konsolunda Firestore veri tarayıcısına gidin.
4. Firestore uzantısına sahip Vector Search'ü yükleyin
Codelab'in bu bölümünde, Firestore ile Vector Search uzantısını yükleyecek ve üzerinde çalıştığınız not alma uygulamasının gereksinimlerine göre yapılandıracaksınız.
Uzantıyı yüklemeyi başlatın
- Yine Firestore bölümünde Uzantılar sekmesini tıklayın.
- Uzantı Merkezi'ni Keşfet'i tıklayın.
- "vector" yazın.
- "Firestore uzantılı vektör arama" seçeneğini tıklayın. Bu işlem sizi uzantının ayrıntılar sayfasına yönlendirir. Bu sayfada uzantı, nasıl çalıştığı, hangi Firebase hizmetlerini gerektirdiği ve nasıl yapılandırabileceğiniz hakkında daha fazla bilgi edinebilirsiniz.
- Firebase konsolunda yükle'yi tıklayın.
- Tüm projelerinizin listesi gösterilir.
- Bu kod laboratuvarının ilk adımında oluşturduğunuz projeyi seçin.
Uzantıyı yapılandırma
- Etkinleştirilen API'leri ve oluşturulan kaynakları inceleyin.
- Gerekli hizmetleri etkinleştirin.
- Tüm hizmetler etkinleştirildikten sonra İleri'yi tıklayın.
- Bu uzantıya verilen erişimi inceleyin.
- Uzantıyı yapılandırın:
- LLM olarak Vertex AI'ı seçin
- Koleksiyon yolu: notlar
- Varsayılan sorgu sınırı: 3
- Giriş alanı adı: text
- Çıkış alanı adı: embedding
- Durum alanı adı:* *durum*
- Mevcut dokümanları yerleştirme: Evet
- Mevcut dokümanları güncelle: Evet
- Cloud Function'in konumu: us-central1
- Yüklemeyi tamamlamak için Uzantıyı yükle'yi tıklayın.
Bu işlem birkaç dakika sürebilir. Kurulumun tamamlanmasını beklerken eğitimimizin bir sonraki bölümüne geçip vektör gömmeleriyle ilgili bazı temel bilgileri okuyabilirsiniz.
5. Arka plan
Kurulumun tamamlanmasını beklerken Firestore uzantılı vektör aramanın işleyiş şekli hakkında bazı temel bilgiler edinebilirsiniz.
Vektörler, yerleştirmeler ve vektör veritabanları nedir?
- Vektörler, bir miktarın büyüklüğünü ve yönünü temsil eden matematiksel nesnelerdir. Verileri karşılaştırmayı ve aramayı kolaylaştıracak şekilde göstermek için kullanılabilirler.
- Yerleşimler, bir kelimenin veya kelime öbeğinin anlamını temsil eden vektörlerdir. Bu modeller, büyük bir metin kümesinde eğitilen bir nöral ağ kullanılarak ve kelimeler arasındaki ilişkiler öğrenilerek oluşturulur.
- Vektör veritabanları, vektör verilerini depolamak ve aramak için optimize edilmiş veritabanlarıdır. Belirli bir sorgu vektörüne en benzer vektörleri bulma işlemi olan verimli en yakın komşu aramasına olanak tanır.
Vektör araması nasıl çalışır?
Vektör araması, sorgu vektörünü veritabanındaki tüm vektörlerle karşılaştırarak çalışır. Sorgu vektörüne en çok benzeyen vektörler, arama sonuçları olarak döndürülür.
İki vektör arasındaki benzerlik, çeşitli mesafe metrikleri kullanılarak ölçülebilir. En yaygın mesafe metriği, iki vektör arasındaki açıyı ölçen kosinüs benzerliğidir.
6. Firestore uzantısıyla Vector Search'i deneme
Bu codelab'de daha önce indirdiğiniz iOS uygulamasında Fictor Search with Firestore uzantısını kullanmadan önce uzantıyı Firebase konsolunda deneyebilirsiniz.
Belgeleri okuyun
Firebase Extensions'ın işleyişiyle ilgili belgelere yer verir.
- Uzantı yüklendikten sonra Başlayın düğmesini tıklayın.
- "Bu uzantı nasıl çalışır?" sekmesini inceleyin. Bu sekmede aşağıdaki açıklamalar yer alır:
- Dokümanları
notes
koleksiyonuna ekleyerek yerleştirme işlemlerini nasıl hesaplayacağınızı, ext-firestore-vector-search-queryCallable
çağrılabilir işlevini çağırarak dizini sorgulama,- veya
_firestore-vector-search/index/queries
koleksiyonuna sorgu belgesi ekleyerek dizini nasıl sorgulayacağınızı öğrenebilirsiniz. - Ayrıca, özel bir yerleştirme işlevinin nasıl ayarlanacağı da açıklanmaktadır. Bu, uzantı tarafından desteklenen LLM'lerden hiçbiri gereksinimlerinizi karşılamıyorsa ve yerleştirmeleri hesaplamak için farklı bir LLM kullanmak istiyorsanız yararlıdır.
- Dokümanları
- Firestore örneğinize gitmek için Cloud Firestore kontrol paneli bağlantısını tıklayın.
_firestore-vector-search/index
belgesine gidin. Uzantının, bu codelab'in önceki adımlarından birinde oluşturduğunuz tüm not dokümanları için yerleştirme işlemlerini tamamladığı gösterilir.- Bunu doğrulamak için not belgelerinden birini açın.
vector<768>
türüne sahipembedding
adlı ek bir alanın yanı sıra birstatus
alanı görürsünüz.
Örnek doküman oluşturma
Uzantıyı çalışırken görmek için Firebase konsolunda yeni bir doküman oluşturabilirsiniz.
- Firestore veri tarayıcısında
notes
koleksiyonuna gidin ve orta sütunda + Doküman ekle'yi tıklayın. - Yeni bir benzersiz doküman kimliği oluşturmak için Auto-ID'yi (Otomatik Kimlik) tıklayın.
text
adlı, dize türüne sahip bir alan ekleyin ve değer alanına metin yapıştırın. Bu metnin lorem ipsum veya başka bir rastgele metin olmaması önemlidir. Örneğin, bir haber makalesi seçin.- Kaydet'i tıklayın.
- Uzantı, veri işlediğini belirtmek için nasıl bir durum alanı eklediğine dikkat edin.
- Kısa bir süre sonra, değeri
vector<768>
olan yeni birembedding
alanı görürsünüz.
Sorgu yapma
Firestore uzantılı Vektör Arama, uygulama bağlamanıza gerek kalmadan doküman dizinindeki verileri sorgulamanıza olanak tanıyan kullanışlı bir özelliğe sahiptir.
- Firebase konsolunun Firestore bölümünde
_firestore-vector-search/index
belgesine gidin. - + Koleksiyon başlat'ı tıklayın
queries
adında yeni bir alt koleksiyon oluşturun- Yeni bir doküman oluşturun ve
query
alanını dokümanlarınızdan birinde bulunan bir metne ayarlayın. Bu yöntem, "Firestore belgelerini Swift ile nasıl eşleyebilirim?" gibi anlamsal sorgular için en iyi sonucu verir (Eklediğiniz notlardan en az biri bu konuyu ele alan metin içeriyorsa). - Durumla ilgili bir hata görebilirsiniz
- Bu durum, eksik bir dizinden kaynaklanmaktadır. Eksik dizin yapılandırmasını ayarlamak için bu bağlantıyı takip ederek projenizin Google Cloud Console'una gidin ve listeden projenizi seçin
- Cloud Log Explorer'da, artık "FAILED_PREKOŞ: Vektör dizini yapılandırması eksik. Lütfen aşağıdaki gcloud komutuyla gerekli dizini oluşturun: ..."
- Hata mesajında, eksik dizini yapılandırmak için çalıştırmanız gereken bir
gcloud
komutu da bulunur. - Komut satırınızda aşağıdaki komutu çalıştırın. Makinenizde
gcloud
KSA yüklü değilse yüklemek için buradaki talimatları uygulayın. Dizinin oluşturulması birkaç dakika sürer. İlerleme durumunu Firebase konsolunun Firestore bölümündeki Dizinler sekmesinden kontrol edebilirsiniz.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
- Dizin oluşturulduktan sonra yeni bir sorgu dokümanı oluşturabilirsiniz.
- Artık sonuçlar alanında eşleşen doküman kimliklerinin listesini göreceksiniz
- Bu kimliklerden birini kopyalayın ve
notes
koleksiyonuna geri dönün. - Kopyaladığınız doküman kimliğini aramak için ⌘+F tuşlarını kullanın. Bu doküman, sorgunuzla en iyi eşleşen dokümandır.
7. Anlamsal aramayı uygulama
Artık mobil uygulamanızı Firestore uzantılı Vektör Arama'ya bağlamanın ve kullanıcılarınızın notlarını doğal dil sorguları kullanarak aramalarına olanak tanıyacak bir anlamsal arama özelliği uygulamanın zamanı geldi.
Sorgu yürütmek için çağrılabilir işlevi bağlama
Firestore uzantılı Vektör Arama, bu kod laboratuvarının önceki aşamalarında oluşturduğunuz dizini sorgulamak için mobil uygulamanızdan çağırabileceğiniz bir Cloud Functions içerir. Bu adımda, mobil uygulamanız ile bu çağrılabilir işlev arasında bir bağlantı kuracaksınız. Firebase'in Swift SDK'sı, uzak işlevlerin çağrılmasını sorunsuz hale getiren API'ler içerir.
- Xcode'a geri dönün ve bu codelab'in önceki adımında klonladığınız projede olduğunuzdan emin olun.
NotesRepository.swift
dosyasını açın.private lazy var vectorSearchQueryCallable: Callable
içeren satırı bulun= functions.httpsCallable("")
Çağrılabilir bir Cloud Functions işlevini çağırmak için, çağırmak istediğiniz işlevin adını belirtmeniz gerekir.
- Projenizin Firebase konsoluna gidin ve Derleme bölümündeki İşlevler menü öğesini açın.
- Uzantı tarafından yüklenen işlevlerin listesini görürsünüz.
ext-firestore-vector-search-queryCallable
adlı dosyayı arayın ve adını kopyalayın.- Adı kodunuza yapıştırın. Şimdi burada
private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
Sorgu işlevini çağırma
performQuery
yöntemini bulun- Aşağıdakileri çağırarak çağrılabilir işlevinizi çağırın:
let result = try await vectorSearchQueryCallable(searchTerm)
Bu bir uzaktan arama olduğu için başarısız olabilir.
- Hataları yakalamak ve Xcode'un konsoluna kaydetmek için bazı temel hata işleme işlemleri ekleyin.
private func performQuery(searchTerm: String) async -> [String] { do { let result = try await vectorSearchQueryCallable(searchTerm) return [result] } catch { print(error.localizedDescription) return [] } }
Kullanıcı arayüzünü bağlama
Kullanıcıların notlarını aramasına izin vermek için not listesi ekranına bir arama çubuğu ekleyeceksiniz. Kullanıcı bir arama terimi girdiğinde, önceki adımda uyguladığınız performQuery
yöntemini çağırmanız gerekir. SwiftUI tarafından sağlanan searchable
ve task
görünüm değiştiricileri sayesinde bu işlem için yalnızca birkaç satır kod gerekir.
- Öncelikle
NotesListScreen.swift
- Liste görünümüne arama kutusu eklemek için
.searchable(text: $searchTerm, prompt: "Search")
görünüm değiştiricisini.navigationTitle("Notes")
satırının hemen üstüne ekleyin. - Ardından, aşağıdaki kodu ekleyip arama işlevini çağırın:
.task(id: searchTerm, debounce: .milliseconds(800)) {
await notesRepository.semanticSearch(searchTerm: searchTerm)
}
Bu kod snippet'i, semanticSearch
yönteminizi eşzamansız olarak çağırır. 800 milisaniyelik bir zaman aşımı sağlayarak görev değiştiriciye, kullanıcının girişini 0,8 saniye boyunca debounce etmesini talimat verirsiniz. Bu, semanticSearch
işlevinin yalnızca kullanıcı yazma işlemini 0,8 saniyeden uzun süre duraklattığında çağrılacağı anlamına gelir.
Kodunuz şu şekilde görünecektir:
...
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")
...
Uygulamayı çalıştırma
- Uygulamayı iOS Simülatöründe başlatmak için ⌘ + R tuşlarına basın (veya Çalıştır düğmesini tıklayın)
- Bu kod laboratuvarının önceki aşamalarında uygulamaya eklediğiniz notların yanı sıra Firebase konsolu üzerinden eklediğiniz notları da görürsünüz.
- Notlar listesinin en üstünde bir arama alanı görürsünüz.
- Eklediğiniz dokümanlardan birinde görünen bir terim yazın. Bu yöntem, "Swift'ten eşzamansız Firebase API'lerini nasıl çağırabilirim?" gibi anlamsal sorgular için en iyi sonucu verir (Eklediğiniz notlardan en az birinin bu konuyu ele alan metin içermesi gerekir).
- Muhtemelen arama sonucunu görmeyi beklersiniz ancak liste görünümü boştur ve Xcode konsolu şu hata mesajını gösterir: "İşlev geçersiz bir bağımsız değişkenle çağrıldı"
Bu durum, verileri yanlış biçimde gönderdiğiniz anlamına gelir.
Hata mesajını analiz etme
- Sorunun ne olduğunu öğrenmek için Firebase konsoluna gidin
- İşlevler bölümüne gidin
ext-firestore-vector-search-queryCallable
işlevini bulun, üç dikey noktayı tıklayarak taşma menüsünü açın- Günlük gezginine gitmek için Günlükleri görüntüle'yi seçin.
- Bir hata görürsünüz.
Unhandled error ZodError: [
{
"code": "invalid_type",
"expected": "object",
"received": "string",
"path": [],
"message": "Expected object, received string"
}
]
Bu, verileri yanlış biçimde gönderdiğiniz anlamına gelir.
Doğru veri türlerini kullanma
Uzantının parametrelerin hangi biçimde olmasını beklediğini öğrenmek için uzantının belgelerine göz atın.
- Firebase konsolundaki Uzantılar bölümüne gidin.
- Yönet -> seçeneğini tıklayın.
- Bu uzantının çalışma şekli bölümünde, giriş ve çıkış parametrelerinin bir tanımını bulabilirsiniz.
- Xcode'a geri dönün ve
NotesRepository.swift
sayfasına gidin - Dosyanın başına aşağıdaki kodu ekleyin:
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
, dokümanlarına göre uzantının beklediği giriş parametresinin yapısıyla eşleşir. Ayrıca, daha sonra ihtiyacınız olacak iç içe yerleştirilmiş birprefilter
özelliği içerir.QueryResponse
, uzantının yanıtının yapısıyla eşleşir. - Çağırılabilir işlev spesifikasyonunu bulun ve giriş ile çıkış türlerini güncelleyin
private lazy var vectorSearchQueryCallable: Callable<QueryRequest, QueryResponse> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
performQuery
'te çağrılabilir işlevin çağrılmasını güncelleyinprivate 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 [] } }
Uygulamayı tekrar çalıştırma
- Uygulamayı tekrar çalıştırma
- Notlarınızdan birine dahil edilen terimleri içeren bir arama sorgusu yazın
- Filtrelenmiş not listesini göreceksiniz.
Kullanıcı verilerini önceden filtreleme
Kutlama etkinliğinde dans etmeye başlamadan önce, uygulamanın mevcut sürümünde bir sorun vardır: Sonuç kümesi, tüm kullanıcılara ait verileri içerir.
Uygulamayı farklı bir simülatörde çalıştırıp daha fazla doküman ekleyerek bunu doğrulayabilirsiniz. Yeni dokümanlar yalnızca bu simülatörde gösterilir. Uygulamayı diğer simülatörde tekrar çalıştırırsanız yalnızca ilk kez oluşturduğunuz dokümanları görürsünüz.
Arama yaparsanız vectorSearchQueryCallable
için yapılan çağrının, diğer kullanıcıya ait olabilecek doküman kimliklerini döndürdüğünü fark edersiniz. Bunu önlemek için bir ön filtre kullanmamız gerekir.
performQuery
ürününde, kodunuzu aşağıdaki şekilde güncelleyin:
let prefilters: [QueryFilter] = if let uid = user?.uid {
[QueryFilter(field: "userId", operator: "==", value: uid)]
}
else {
[]
}
let queryRequest = QueryRequest(query: searchTerm,
limit: 2,
prefilters: prefilters)
Bu işlem, verileri giriş yapmış kullanıcının kimliğine göre ön filtreler. Tahmin edebileceğiniz gibi, bunun için Firestore dizininin güncellenmesi gerekir.
embedding
alanındaki hem userId
değerini hem de vektör yerleştirmelerini içeren yeni bir Firestore dizini tanımlamak için komut satırından aşağıdaki komutu çalıştırın.
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
Dizin oluşturulduktan sonra, beklendiği gibi çalıştığını doğrulamak için uygulamayı tekrar çalıştırın.
8. Tebrikler
Tebrikler, bu codelab'i başarıyla tamamladınız!
Bu kod laboratuvarında şunları öğrendiniz:
- Anlamsal aramanın etkin olduğu bir Cloud Firestore veritabanı oluşturun.
- Veritabanı ile etkileşimde bulunmak için basit bir SwiftUI uygulaması oluşturun.
- SwiftUI'nin aranabilir görünüm değiştiricisini ve görev değiştiricisini kullanarak bir arama çubuğu uygulayın.
- Firestore SDK'sının Callable arayüzünü kullanarak veritabanında semantik arama yapmak için bir Cloud Functions işlevi çağırın.
Bu codelab'de edindiğiniz bilgilerle artık Cloud Firestore'un anlamsal arama özelliklerinden faydalanan güçlü uygulamalar oluşturarak kullanıcılara daha sezgisel ve verimli bir arama deneyimi sunabilirsiniz.
Firestore'un yeni vektör alanı ve vektör yerleştirmelerinin nasıl hesaplanacağı hakkında daha fazla bilgi edinmek için dokümanlara göz atın.