Modern arama uygulamaları, basit anahtar kelime eşleştirmesinin çok ötesine geçti. Bugünün kullanıcıları; semantik niyeti anlayan, belirli terminolojiye saygı gösteren ve fiziksel konumu göz önünde bulunduran kesintisiz bir deneyim bekliyor. Örneğin, bir kullanıcı "yakınımdaki en iyi vegan restoranlar" aradığında, "yakınımda" ifadesi coğrafi, "vegan" bir anahtar kelime kısıtı ve "en iyi" ifadesi ise yorumlara veya görsel gömme (embedding) verilerine dayalı semantik bir sıralamayı ima eder.
Çok sayıda geleneksel mimari, karmaşık mikro hizmet orkestrasyonu olmadan bu üç farklı veri türünü aynı anda işlemekte zorlanır. Vespa, açık kaynaklı bir arama ve sunum motoru olarak bu zorluğu yerel olarak (native) çözer. Vektörleri, metni ve konumu birinci sınıf vatandaşlar olarak ele alarak Vespa, geliştiricilerin bu sinyalleri tek bir, yüksek performanslı sorguda birleştirmesine olanak tanır.
Neden Çok Modlu Arama Önemlidir
Hibrit arama artık bir yenilik değil; bir zorunluluktur. Saf vektör araması, tam marka adları veya teknik kodlar için gereken hassasiyeti genellikle içermez. Saf anahtar kelime araması, doğal dil sorgularının semantik nüanslarını yakalamakta başarısız olur. Coğrafi kısıtlamaların eklenmesi, konum verileri genellikle içerikten ayrı saklandığı için bir karmaşıklık katmanı daha oluşturur.
Vespa'nın mimarisi bu siloları ortadan kaldırır. Tüm veri türlerini birleştirilmiş bir şemaya indeksleyerek, sıralama profiline (rank profile) özel sıralama işlevleri kullanarak bu sinyalleri tartma ve birleştirme imkanı verir. Bu, birden fazla arama motorunu federasyonlaştırmaya kıyasla daha düşük gecikme süresi ve daha yüksek ilgili sonuçlar sağlar.
Şemayı Tanımlama: Çok Modlu Verileri Yapılandırma
Çok modlu aramayı etkinleştirmek için şemanız uygun alan türlerini tanımlamalıdır. Vespa, metin için string, konum için geopoint ve vektör gömme (embedding) verileri için tensor destekler.
schema products {
document store {
field name type string {
index
}
field location type geopoint {
index
}
field embedding type tensor<float>[128] {
index
}
field category type string {
index
}
}
}
tensor alanının vektör benzerliği yoluyla aranabilir olması için bir indekse, geopoint'in ise uzamsal sorgular için bir indekse ihtiyaç duyduğunu unutmayın.
Çok Modlu Sorguyu Oluşturma
Vespa'nın gücü, birden fazla veri türünü hedefleyen tek bir sorguyu yürütebilme yeteneğinde yatar. Konuma göre filtrelemek, anahtar kelimelere göre filtrelemek ve aynı anda vektör en yakın komşu araması yapmak için select ifadesini kullanabilirsiniz.
"Modern dekorlu Paris'te lüks oteller" için bir sorgu düşünün. Sorgunuzu şu şekilde yapılandırabilirsiniz:
GET /search/?query=(
userQuery:(luxury hotel) OR
embedding:nearestNeighbor(embedding, [0.1, 0.2, ...])
) AND location:geoCircle(48.8566, 2.3522, 5km)
&ranking=queryName
Bu örnekte:
- Anahtar Kelime Eşleşmesi:
userQuery:(luxury hotel)geleneksel metin eşleştirmesini sağlar. - Vektör Eşleşmesi:
nearestNeighbor, gömülü sorgu vektörüne dayalı olarak semantik olarak benzer belgeleri bulur. - Coğrafi Filtre:
geoCircle, sonuçları Paris koordinatlarından 5 km içinde sınırlar.
Füzyon İçin Sıralama Stratejileri
Sadece üç kaynaktan sonuçları almak yeterli değildir; bunları tutarlı bir şekilde sıralamanız gerekir. Vespa'nın Rank Profile özelliği, farklı alanlardan gelen puanları birleştiren özel formüller tanımlamanıza olanak tanır.
rank-profile MultiModalRank {
inputs {
input<float> vectorWeight: 0.5
input<float> keywordWeight: 0.3
input<float> locationWeight: 0.2
}
first-phase {
function<float> vector_score() {
expression: closestMatchDistance(embedding)
}
function<float> keyword_score() {
expression: bm25(name)
}
function<float> location_score() {
expression: 1.0 - geoDistance(location) / 10000.0
}
expression: vectorWeight * vector_score() +
keywordWeight * keyword_score() +
locationWeight * location_score()
}
}
Bu formül, her bileşeni dinamik olarak tartar. Geliştiriciler, semantik ilgiliyi mi yoksa coğrafi yakınlığı mı önceliklendirdiklerine bağlı olarak, A/B testlerine dayanarak bu ağırlıkları kendi özel kullanım senaryolarına göre optimize edebilir.
Sonuç
Vespa, ayrı vektör, metin ve coğrafi veritabanlarını entegre etmenin karmaşıklığını ortadan kaldırarak çok modlu arama için sağlam ve ölçeklenebilir bir çözüm sunar. Birleşik indeksleme ve esnek sıralama motorunu kullanarak geliştiriciler, düşük gecikme süresiyle son derece ilgili ve bağlamdan haberdar arama deneyimleri oluşturabilir. Veriler giderek daha çeşitli hale geldikçe, bu modları tek bir sorguda birleştirme yeteneği kritik bir rekabet avantajı haline gelir.