PgVector ile .NET'te Vektör Araması Oluşturma, Bir Geliştirici Rehberi
Eğer büyük miktarda veri, belgeler, ürün kataloğu, müşteri kayıtları veya taranmış dosyalarla uğraşan .NET uygulamaları geliştiriyorsanız, arama her zaman bir zorluktur. Anahtar kelime araması, bağlamı kaçırır. Tam metin araması kendi sınırlarına sahiptir. Ancak vektör araması denklemi tamamen değiştirir.
Kısa süre önce, .NET topluluğunda en saygın seslerden biri ve bir Microsoft MVP'si olan Milan Jovanović'in, PgVector kullanarak .NET'te vektör aramasının nasıl uygulanacağını adım adım anlatan mükemmel bir kılavuzuna rastladık. Bu, var olan veritabanınıza doğrudan anlamlı arama yetenekleri getiren bir PostgreSQL uzantısıdır.
Vektör araması nedir ve nasıl çalışır?
Geleneksel arama, tam kelimeleri veya ifadeleri eşleştirir. Bir kullanıcı 'vadesi geçmiş fatura' araması yaparsa, bir anahtar kelime araması yalnızca bu tam kelimeleri içeren belgeleri bulacaktır. "Ödeme bekleyen" veya "bakiye ödenmesi gereken" diyen bir belgeyi yüzeye çıkarmaz, oysa ki aynı şeyi ifade etmektedirler.
Vektör araması farklı çalışır. Kelime eşleştirmesi yerine anlam eşleştirilir.
İşlem hattının pratikte nasıl çalıştığı şu şekildedir:
Öncelikle metin, içeriğin anlamsal anlamını yakalayan yüksek boyutlu kayan nokta sayılarından oluşan bir dizi olan gömme adı verilen sayısal bir temsile dönüştürülür. Örneğin, "vadesi geçmiş fatura" ve "ödeme bekleyen" cümleleri, vektör uzayında matematiksel olarak birbirine yakın olan gömülü temsilciler üretir, ortak kelimeleri yoktur ancak.
Bu gömüler genellikle OpenAI'nın metin gömme modelleri gibi bir API aracılığıyla bir makine öğrenme modeli tarafından üretilir ve veritabanınızdaki verilerle birlikte depolanır.

Bir kullanıcı bir arama sorgusu oluşturduğunda, aynı model kullanılarak o sorgu da bir gömmeye dönüştürülür. Ardından veritabanı, sorgu gömü ile saklanan her gömme arasındaki mesafeyi hesaplar, vektör uzayında en yakın olan sonuçları döndürüyor, yani sadece anahtar kelime eşleştirmesiyle değil, en anlamlı benzer olanları.
PgVector, bunu PostgreSQL içinde doğrudan etkinleştirerek size ilişkin verilerinizin yanında verimli benzerlik aramaları sağlıyor, özel bir vektör veritabanı gerektirmeden.
Veritabanını Başlatma
Vektörleri depolamadan önce, PgVector eklentisini etkinleştirin ve tabloyu kurun.
var builder = DistributedApplication.CreateBuilder(args);
var ollama = builder.AddOllama("ollama")
.WithLifetime(ContainerLifetime.Persistent)
.WithDataVolume()
.WithGPUSupport();
var embeddingModel = ollama.AddModel("qwen3-embedding:0.6b");
var postgres = builder.AddPostgres("postgres", port: 6432)
.WithLifetime(ContainerLifetime.Persistent)
.WithDataVolume()
.WithImage("pgvector/pgvector", "pg17")
.AddDatabase("articles");
builder.AddProject<Projects.PgVector_Articles>("pgvector-articles")
.WithReference(embeddingModel)
.WithReference(postgres)
.WaitFor(embeddingModel)
.WaitFor(postgres);
builder.Build().Run();
var builder = DistributedApplication.CreateBuilder(args);
var ollama = builder.AddOllama("ollama")
.WithLifetime(ContainerLifetime.Persistent)
.WithDataVolume()
.WithGPUSupport();
var embeddingModel = ollama.AddModel("qwen3-embedding:0.6b");
var postgres = builder.AddPostgres("postgres", port: 6432)
.WithLifetime(ContainerLifetime.Persistent)
.WithDataVolume()
.WithImage("pgvector/pgvector", "pg17")
.AddDatabase("articles");
builder.AddProject<Projects.PgVector_Articles>("pgvector-articles")
.WithReference(embeddingModel)
.WithReference(postgres)
.WaitFor(embeddingModel)
.WaitFor(postgres);
builder.Build().Run();Aspire kullanmıyorsanız, aynı pgvector/pgvector:pg17 görüntüsünü docker-compose üzerinden çalıştırabilir ve ona normal bir bağlantı dizesiyle işaret edebilirsiniz.
Bu bölüm, Milan Jovanović'in orijinal makalesine dayanmaktadır. Tam kod örnekleri ve uygulama detayları burada mevcuttur.
Bu Durum Iron Software Müşterileri İçin Neden Önemli?
Birçok müşterimiz IronPDF, IronOCR ve IronBarcode kullanarak yüksek hacimli belgeleri işler; faturalar, raporlar, taranmış kayıtlar, nakliye etiketleri.
Iron Software kütüphanelerini PgVector ile birleştiren pratik bir iş akışı şu şekilde olabilir:
Extract– Taranmış PDF'lerden veya görüntülerden metin çıkarmak için IronOCR'u kullanınEmbed– Vektör temsiller oluşturmak için çıkarılan metni bir gömme modeline gönderinStore– Gömülemeleri PostgreSQL'de belge meta verileriyle birlikte Pgvector kullanarak kaydedinSearch– Tam anahtar kelime eşleşmeleri yerine en anlamsal olarak ilgili belgeleri döndüren anlama göre sorgulama yapın
Sonuç, ilave altyapı gerektirmeyen, tamamen mevcut .NET ve PostgreSQL yığını içinde inşa edilen daha akıllı bir belge arama sistemi.
Milan'ın Kılavuzunun Kapsamı
Milan'ın makalesi, tam C# uygulamasını kapsıyor: PostgreSQL'de PgVector eklentisini kurmak, Npgsql ile Entity Framework Core'u yapılandırmak, gömmeler oluşturmak, performans için vektör indeksler oluşturmak ve benzerlik sorguları çalıştırmak. Bu, hemen uygulanabilir, uygulamalı ve üretime yönelik her .NET geliştiricisi için uygundur.
Iron Software geliştirme ekibi düzenli olarak .NET kaynakları, öğreticiler ve mühendislik içgörüleri paylaşıyor.
.NET üzerinde belge iş akışları mı oluşturuyorsunuz? Iron Suite ihtiyaçınız olan her şeye sahiptir.
