1. Genel bakış
Bu codelab'de, Firestore vektör benzerlik aramasını kullanarak uygulamanıza nasıl güçlü arama özellikleri ekleyeceğinizi öğreneceksiniz. Swift ve SwiftUI ile yazılmış bir not alma uygulaması için anlamsal arama özelliği uygulayacaksınız.
Öğrenecekleriniz
- Vektör yerleştirmelerini hesaplamak için Firestore ile Vektör Arama uzantısını yükleme.
- Bir Swift uygulamasından Firebase Cloud Functions'ı çağırma.
- Oturum açmış kullanıcıya göre verileri önceden filtreleme.
Gerekenler
- Xcode 15.3
- Codelab örnek kodu. Bu kodu, codelab'in sonraki bir adımında indireceksiniz.
2. Firebase projesi oluşturma ve ayarlama
Firebase Vector Search uzantısını kullanmak için bir Firebase projesine ihtiyacınız vardır. 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şturun
- Firebase'de oturum açın
- Firebase konsolunda Proje ekle'yi tıklayın, ardından projenizi Firestore Vector Search Lab olarak adlandırın
- Proje oluşturma seçeneklerini tıklayın. İstenirse Firebase şartlarını kabul edin.
- Bu uygulama için Analytics kullanmayacağınızdan Google Analytics ekranında Bu proje için Google Analytics'i etkinleştir kutusunun işaretini kaldırın.
- Son olarak Create project (Proje oluştur) seçeneğini tıklayın.
Firebase projeleri hakkında daha fazla bilgi edinmek için Firebase projelerini anlama başlıklı makaleyi inceleyin.
Konsolda Firebase ürünlerini etkinleştirme ve ayarlama
Oluşturduğunuz uygulama, Apple uygulamalarında kullanılabilen çeşitli Firebase ürünleri kullanıyor:
- Kullanıcılarınızın uygulamanızda oturum açmasına kolayca izin vermek için Firebase Authentication.
- Yapılandırılmış verileri buluta kaydetmek ve veriler değiştiğinde anında bildirim almak için Cloud Firestore.
- Veritabanınızı güvenli hale getirmek için Firebase Güvenlik Kuralları.
Bu ürünlerden bazıları özel yapılandırma gerektirir veya Firebase konsolu kullanılarak etkinleştirilmesi gerekir.
Firebase Authentication için anonim kimlik doğrulamayı etkinleştir
Bu uygulama, kullanıcıların hesap oluşturmak zorunda kalmadan uygulamayı kullanmaya başlayabilmesi için anonim kimlik doğrulama teknolojisinden yararlanır. Bu, ilk katılım sürecinin sorunsuz olmasını sağlar. Anonim kimlik doğrulama (ve adlandırılmış bir hesaba yükseltme) hakkında daha fazla bilgi edinmek için Anonim kimlik doğrulama için En İyi Uygulamalar başlıklı makaleyi inceleyin.
- Firebase konsolunun sol panelinde Derleme > Kimlik Doğrulama'yı tıklayın. Ardından Başlayın'ı tıklayın.
- Kaydolan kullanıcıları görebileceğiniz, oturum açan sağlayıcıları 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 Anonim'i tıklayın, anahtarı Etkinleştir'e getirin ve Kaydet'i tıklayın.
Cloud Firestore kurulumu
Bu Swift uygulaması, notları kaydetmek için Cloud Firestore'u kullanır. Cloud Firestore'u kurmak için:
- Firebase konsolunun sol tarafındaki panelde Derle > Firestore Veritabanı'nı tıklayın. Ardından, Create database'i (Veritabanı oluştur) tıklayın.
- Veritabanınızın konumunu seçerek Gemini'nin kullanıma sunulduğu bir konum seçtiğinizden emin olun (us-central1 bölgesini kullanabilirsiniz). Bununla birlikte, bu konumun daha sonra değiştirilemeyeceğini unutmayın. İleri'yi tıklayın.
- Test modunda başlat seçeneğini belirleyin. Güvenlik kurallarıyla ilgili sorumluluk reddi beyanını okuyun. Test modu, geliştirme sırasında veritabanına serbestçe yazabilmenizi sağlar.
- Veritabanını oluşturmak için Oluştur'u tıklayın.
3. Mobil uygulamayı bağlayın
Codelab'in 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 depoyu 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 uygulamayı Firebase konsolunda ayarlamanız gerekir. Aynı Firebase projesine birden fazla istemci uygulaması bağlayabilirsiniz. Örneğin, bir Android veya web uygulaması oluşturuyorsanı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 (com.google.firebase.codelab.Notes) paket kimliğini 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 Notes klasörüne sürükleyin. Bunu yapmanın en iyi yolu, öğeyi 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çili olduğundan emin olun ve Son'u tıklayın.
- Artık Firebase konsolunda kurulum işleminin kalanını tıklayabilirsiniz: Bu bölümün başında indirdiğiniz örnekte zaten Firebase Apple SDK yüklü ve ilk kullanıma hazır hale getirilmiş durumda. Konsola devam et'i tıklayarak işlemi tamamlayabilirsiniz.
Uygulamayı çalıştırma
Şimdi uygulamayı deneme zamanı!
- Tekrar Xcode'a dönün ve iOS Simülatörü'nde uygulamayı çalıştırın. Hedefleri Çalıştır açılır menüsünde, önce iOS Simülatörlerinden birini seçin.
- Ardından, Çalıştır düğmesini tıklayın veya ⌘ + R tuşlarına basın.
- Uygulama, Simülatörde başarıyla kullanıma sunulduktan sonra birkaç not ekleyin.
- Firebase konsolunda Firestore veri tarayıcısına gidin. Böylece, uygulamaya yeni notlar eklerken oluşturulan yeni dokümanları görebilirsiniz.
4. Vector Search with Firestore uzantısını 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üklemeye başlayın
- Yine Firestore bölümünde Uzantılar sekmesini tıklayın.
- Uzantılar Merkezi'ni keşfedin'i tıklayın.
- "Vektör" yazın.
- "Firestore uzantısıyla vektör arama"yı tıklayın. Bu sizi uzantının ayrıntılar sayfasına yönlendirir. Burada, uzantı, nasıl çalıştığı, hangi Firebase hizmetleri için gerekli olduğu ve uzantıyı nasıl yapılandırabileceğiniz hakkında daha fazla bilgi edinebilirsiniz.
- Firebase konsolunda yükle'yi tıklayın.
- Tüm projelerinizin bir listesi size sunulur.
- Bu codelab'in ilk adımında oluşturduğunuz projeyi seçin.
Uzantıyı yapılandırma
Firebase Extensions, projenizin kullandıkça öde Blaze planına dahil olmasını gerektiren Cloud Functions for Firebase'den yararlanır. Vector Search'ü Firestore uzantısını kullanarak kullanabilmek için projenizi yükseltmeniz gerekir.
- Devam etmek için Projeyi yükselt'i tıklayın.
- Mevcut bir faturalandırma hesabını seçin veya yeni bir hesap oluşturun. Devam'ı tıklayın.
- Bütçe belirleyin (ör. 10 TRY), Devam'ı ve ardından Satın al'ı tıklayın.
- Etkinleştirilen API'leri ve oluşturulan kaynakları inceleyin.
- Gerekli hizmetleri etkinleştirin.
- Cloud Storage'ı etkinleştirirken güvenlik kuralları için test modunu seçin.
- Cloud Storage'ın Cloud Firestore örneğinizle aynı konumu kullanacağını onaylayın.
- Tüm hizmetler etkinleştirildikten sonra İleri'yi tıklayın.
- Bu uzantıya inceleme erişimi verildi.
- 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ı: metin
- Çıkış alanı adı: embedding
- Durum alanı adı:* *durum*
- Mevcut dokümanları yerleştir: Evet
- Mevcut dokümanları güncelle: Evet
- Cloud Functions konumu: us-central1
- Yüklemeyi tamamlamak için Uzantıyı yükle'yi tıklayın.
Bu işlem birkaç dakika sürebilir. Yükleme işleminin tamamlanmasını beklerken eğiticinin bir sonraki bölümüne geçebilir ve vektör yerleştirmeleri hakkında bazı arka plan bilgilerini okuyabilirsiniz.
5. Genel bilgi
Yüklemenin tamamlanmasını beklerken, Firestore ile Vector Search uzantısının nasıl çalıştığıyla ilgili bazı arka plan bilgilerini aşağıda bulabilirsiniz.
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 sunmak için kullanılabilirler.
- Gömmeler, bir kelimenin veya ifadenin anlamını temsil eden vektörlerdir. Bu araçlar, büyük bir metin bir nöral ağının eğitilmesi ve kelimeler arasındaki ilişkilerin öğrenilmesiyle oluşturulur.
- Vektör veritabanları, vektör verilerini saklamak ve aramak için optimize edilmiş veritabanlarıdır. Belirli bir sorgu vektörüne en çok benzeyen vektörleri bulma işlemi olan, en yakın komşu aramasının verimli bir şekilde yapılmasını sağlarlar.
Vektör Arama nasıl çalışır?
Vektör araması, sorgu vektörü veritabanındaki tüm vektörlerle karşılaştırılarak çalışır. Sorgu vektörüne en çok benzeyen vektörler, arama sonucu olarak döndürülür.
İki vektör arasındaki benzerlik, çeşitli mesafe metrikleri kullanılarak ölçülebilir. En yaygın uzaklık metriği, iki vektör arasındaki açıyı ölçen kosinüs benzerliğidir.
6. Firestore ile Vektör Arama uzantısını deneyin
Bu codelab'de daha önce indirdiğiniz iOS uygulamasında Firestore ile Vektör Arama uzantısını kullanmadan önce uzantıyı Firebase konsolunda deneyebilirsiniz.
Belgeleri okuyun
Firebase Extensions, çalışmalarıyla ilgili belgeler içerir.
- Uzantının yüklenmesi tamamlandıktan sonra Başlayın düğmesini tıklayın.
- "Bu uzantının çalışma şekli" sekmesine göz atın. Açıklamada şunlar açıklanmaktadır:
- dokümanlar için yerleştirilmiş öğeleri
notes
koleksiyonuna ekleyerek nasıl hesaplayacağınızı, ext-firestore-vector-search-queryCallable
çağrılabilir işlevini çağırarak dizinin nasıl sorgulanacağına,- veya
_firestore-vector-search/index/queries
koleksiyonuna sorgu belgesi ekleyerek dizini sorgulama. - Makalede, özel yerleştirme işlevinin nasıl ayarlanacağı da açıklanmıştır. Uzantının desteklediği LLM'lerden hiçbiri gereksinimlerinizi karşılamıyorsa ve yerleştirmeleri hesaplamak için farklı bir LLM kullanmak istiyorsanız bu yöntem yararlıdır.
- dokümanlar için yerleştirilmiş öğeleri
- Firestore örneğinize gitmek için Cloud Firestore kontrol paneli bağlantısını tıklayın
_firestore-vector-search/index
dokümanına gidin. Uzantının, bu codelab'in önceki bir adımında oluşturduğunuz tüm not dokümanlarının yerleştirmelerini tamamladığını gösterir.- Bunu doğrulamak için notlar dokümanlarından birini açın.
vector<768>
türündeembedding
adlı ek bir alan ve birstatus
alanı göreceksiniz.
Ö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ütundaki + Belge ekle'yi tıklayın. - Yeni bir benzersiz doküman kimliği oluşturmak için Auto-ID'yi (Otomatik Kimlik) tıklayın.
- Dize türünde
text
adlı bir alan ekleyin ve değer alanına metin yapıştırın. Bunun lorem ipsum veya rastgele başka bir metin olmaması önemlidir. Örneğin, bir haber makalesi seçin. - Kaydet'i tıklayın.
- Uzantının, verileri işlediğini belirtmek için nasıl bir durum alanı eklediğine dikkat edin.
- Kısa bir süre sonra
vector<768>
değerinde yeni birembedding
alanı göreceksiniz.
Sorgu gerçekleştirme
Firestore ile Vector Search uzantısı, herhangi bir uygulama bağlamanıza gerek kalmadan doküman dizinini sorgulamanızı sağlayan küçük ve şık bir özelliğe sahiptir.
- Firebase konsolunun Firestore bölümünde
_firestore-vector-search/index
belgesine gidin - + Koleksiyonu başlat'ı tıklayın
queries
adlı yeni bir alt koleksiyon oluştur- Yeni bir doküman oluşturun ve
query
alanını dokümanlarınızdan birinde görünen bir metne ayarlayın. Bu, en çok, "Firestore dokümanlarını Swift ile nasıl eşleyebilirim?" gibi semantik sorgularda işe yarar (eklediğiniz notlardan en az birinin bu konuyu açıklayan bir metin içermesi şartıyla). - Şu durumda bir hata görebilirsiniz:
- Bunun nedeni, eksik bir dizindir. Eksik dizin yapılandırmasını ayarlamak için bu bağlantıyı izleyip listeden projenizi seçerek projenizin Google Cloud konsoluna gidin
- Cloud Log Explorer'da, artık "FAILED_PRECONDITION: Vektör dizini yapılandırması eksik. Lütfen aşağıdaki gcloud komutuyla gerekli dizini oluşturun: ..."
- Hata mesajı, eksik dizini yapılandırmak için çalıştırmanız gereken bir
gcloud
komutu da içerir. - Komut satırınızdan aşağıdaki komutu çalıştırın. Makinenizde
gcloud
CLI 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 ayarlandıktan 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ıp
notes
koleksiyonuna geri dönün. - Kopyaladığınız doküman kimliğini aramak için ⌘+F tuşlarını kullanın. Sorgunuzla en iyi eşleşen doküman, bu dokümandır.
7. Anlamsal aramayı uygulayın
Artık mobil uygulamanızı Firestore uzantısıyla Vector Search'e bağlayıp kullanıcılarınızın notlarında doğal dil sorguları kullanarak arama yapmasına olanak sağlayacak bir anlamsal arama özelliği uygulamanın zamanı geldi.
Sorgu gerçekleştirmek için çağrılabilir işlevi bağlayın
Firestore ile Vector Search uzantısı, bu codelab'de daha önce oluşturduğunuz dizini sorgulamak için mobil uygulamanızdan çağırabileceğiniz bir Cloud Functions işlevi 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
değerini içeren satırı bul= 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ı olanı arayın ve adını kopyalayın.- Adı kodunuza yapıştırın. Şimdi şu şekilde olmalı:
private lazy var vectorSearchQueryCallable: Callable<String, String> = functions.httpsCallable("ext-firestore-vector-search-queryCallable")
Sorgu işlevini çağırma
performQuery
yöntemini bulun
çağrısı yaparak çağrılabilir işlevinizi çağırınlet result = try await vectorSearchQueryCallable(searchTerm)
Bu uzaktan yapılan bir arama olduğundan başarısız olabilir.
- Hataları yakalamak ve Xcode konsoluna kaydetmek için temel hata giderme adımları 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ında arama yapmasına izin vermek için, notlar listesi ekranında bir arama çubuğu uygulayacaksınız. Kullanıcı bir arama terimi yazdığında, ö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 sadece birkaç satır kod gerektirir.
- İlk olarak
NotesListScreen.swift
uygulamasını açın - 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 ekleyerek 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 alçak geri döndürmesi talimatını verirsiniz. Bu durumda semanticSearch
, yalnızca kullanıcı 0,8 saniyeden uzun bir süre yazmayı duraklattığında çağrılır.
Kodunuz aşağıdaki gibi 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'de başlatmak için ⌘ + R tuşlarına basın (veya Çalıştır düğmesini tıklayın)
- Bu codelab'de daha önce uygulamaya eklediğiniz notların yanı sıra Firebase konsolu aracılığıyla eklediğiniz notları görürsünüz
- Notlar listesinin en üstünde bir arama alanı göreceksiniz.
- Eklediğiniz dokümanlardan birinde görünen bir terimi yazın. Yine bu yöntem, "Swift'ten eşzamansız Firebase API'lerini nasıl çağırabilirim?" gibi anlamsal sorgularda daha iyi sonuç verir (eklediğiniz notlardan en az birinin bu konuyu açıklayan bir metin içermesi şartıyla).
- Muhtemelen arama sonucunu görmeyi bekliyorsunuz ancak bunun yerine 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, verileri yanlış biçimde gönderdiğiniz anlamına gelir.
Hata mesajını analiz edin
- 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öster'i seçin
- Bir hata mesajı gösterilir
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 kullanın
Uzantının, parametrelerin hangi biçimde olmasını beklediğini öğrenmek için uzantı belgelerine göz atın.
- Firebase konsolunda 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 spesifikasyonunu bulabilirsiniz.
- Xcode'a geri dönün ve
NotesRepository.swift
uygulamasına gidin - Aşağıdaki kodu dosyanın başına 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
, uzantının dokümanlarına göre uzantının beklediği giriş parametresinin yapısıyla eşleşiyor. Ayrıca, daha sonra ihtiyaç duyacağınız iç içe yerleştirilmiş birprefilter
özelliği de içerir.QueryResponse
, uzantının yanıt yapısıyla eşleşir. - Çağrılabilir işlevin 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
içinde çağrılabilir işlevin çağrısı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ırın
- Uygulamayı tekrar çalıştırın
- Notlarınızdan birindeki terimleri içeren bir arama sorgusu yazın
- Artık notlarınızı içeren filtrelenmiş bir liste göreceksiniz
Kullanıcı verilerine önceden filtre uygula
Kutlamak için dansa başlamadan önce uygulamanın mevcut sürümüyle ilgili bir sorun var: Sonuç kümesinde tüm kullanıcılara ait veriler yer alıyor.
Uygulamayı farklı bir simülatörde çalıştırarak ve daha fazla doküman ekleyerek bunu doğrulayabilirsiniz. Yeni dokümanlar yalnızca söz konusu simülasyon aracında görünür. Uygulamayı diğer simülasyon aracında yeniden çalıştırırsanız yalnızca ilk seferde oluşturduğunuz dokümanları görürsünüz.
Arama yaparsanız vectorSearchQueryCallable
çağrısının diğer kullanıcıya ait olabilecek doküman kimliklerini döndürdüğünü fark edeceksiniz. Bunu önlemek için ö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, giriş yapmış kullanıcının kimliğine göre verileri önceden filtreler. Tahmin edebileceğiniz gibi, bunun için Firestore dizininin güncellenmesi gerekir.
embedding
alanında hem userId
hem de vektör yerleştirmelerini içeren yeni bir Firestore dizini tanımlamak için komut satırında 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 derlemeyi tamamladıktan 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 codelab'de şunları öğrendiniz:
- Anlamsal aramanın etkin olduğu bir Cloud Firestore veritabanı kurun.
- Veritabanıyla 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 arama çubuğu uygulayın.
- Firestore SDK'sının Çağırılabilir 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 semantik arama özelliklerinden yararlanan güçlü uygulamalar geliştirerek kullanıcılara daha sezgisel ve verimli bir arama deneyimi sunabilirsiniz.
Firestore'un yeni vektör alanı ve vektör yerleştirmelerini hesaplama hakkında daha fazla bilgi edinmek için belgelere göz atın.