Qdrant VectorDB Kullanımı -2
Bir önce ki yazıda genel hatlarıyla bahsetmiştik bu bölümde ise biraz daha derinlere inmek istiyorum bundan dolayı uzun ama güzel basit anlatımla olucak hadi başlayalım
Qdrant Mimarisi Notları
1. Collection (Koleksiyon)
- Verilerin saklandığı temel yapı
- Her koleksiyon belirli bir boyutta vektör kabul eder
- Örnek:
my_collection128 boyutlu vektör alabilir, Cosine distance kullanabilir
2. Point (Veri Noktası)
- Veritabanına eklenen her bir veri öğesi
- İçeriği:
vector: Sayılardan oluşan liste (örn: [0.1, 0.2, 0.3])payload: Ekstra bilgiler (örn: {“name”: “makale1”})
3. Payload
- Veriye ait açıklayıcı bilgiler
- Filtreleme ve gruplama için kullanılır
- Örnek:
{"category": "haber", "year": 2023}
4. Distance Metric (Benzerlik Ölçütleri)
- Cosine: Açıya bakar (anlam benzerliği için ideal)
- Euclidean: Noktalar arası düz mesafe
- Dot: Vektör çarpımı (LLM ve embedding’ler için etkili)
5. Segment
- Qdrant verileri içerde küçük parçalara (segment) böler
- Arama işlemleri segmentlerde paralel yapılır
- Yeni veri geldikçe yeni segment oluşur, zamanla birleşirler (merge)
7. Write-Ahead Log (WAL)
- Veriler önce dosyaya yazılır, sonra belleğe alınır
- Ani kapanmalarda veri kaybını önler
8. Snapshot
- Anlık yedek alma sistemi
- Sistem backup alıp kaldığı yerden devam edebilir
Veri Akışı
- curl veya client ile veri gönderilir
- Veri segment’e yazılır + WAL dosyasına loglanır
- Filtre yapılırsa payload’a göre filtrelenir
- Arama yapılırsa HNSW ile en yakın sonuçlar bulunur
- Sonuçlar distance + payload ile birlikte döner
Benzerlik Skorları
Skor Nedir?
- Bir vektörün koleksiyondaki diğer vektörlerle benzerlik puanı
- Skor ne kadar yüksekse, o kadar çok benzerlik var demek
Dot Product (Nokta Çarpımı)
- İki vektör arasındaki büyüklük ve yön çarpımı
- Yüksek dot değeri: Vektörler benzer
- Düşük dot değeri: Vektörler daha az benzer
- Örnek: İki kişinin alışveriş listesi benziyorsa dot yüksek çıkar
Cosine Similarity (Kosinüs Benzerliği)
- İki vektör arasındaki açıyı ölçer
- 1’e yakın: Aynı yönde (çok benzer)
- 0’a yakın: Dikey (alakasız)
- Örnek: Biri 1 cips, diğeri 10 cips alsa da cosine 1 olur (aynı yön)
Euclidean Distance (Öklid Mesafesi)
- İki vektör arasındaki gerçek mesafeyi ölçer
- Küçük mesafe: Daha yakın, daha benzer
- Büyük mesafe: Daha uzak, daha farklı
Dense Vector (Yoğun Vektör)
- Her elemanı bir anlam taşır, çoğu sıfırdan farklıdır
- Genellikle büyük boyutlu (512, 768 gibi)
- Örnek: Bir yemeğin tüm malzemelerini içeren tarif
1. Collection Oluşturma
curl -X PUT http://localhost:6333/collections/ibrahim \
-H "Content-Type: application/json" \
-d '{
"vectors": {
"size": 4,
"distance": "Dot"
}
}'
2. Veri Ekleme
curl -X PUT "http://localhost:6333/collections/ibrahim/points?wait=true" \
-H "Content-Type: application/json" \
-d '{
"points": [
{"id": 1, "vector": [0.2, 0.1, 0.9, 0.7], "payload": {"city": "istanbul"}},
{"id": 2, "vector": [0.18, 0.01, 0.85, 0.8], "payload": {"city": "ankara"}}
]
}'
3. Arama Yapma
curl -X POST "http://localhost:6333/collections/ibrahim/points/search" \
-H "Content-Type: application/json" \
-d '{
"vector": [0.2, 0.1, 0.9, 0.7],
"top": 1
}'
4. Snapshot İşlemleri
# Snapshot oluşturma
curl -X POST http://localhost:6333/collections/ibrahim/snapshots
Gelişmiş Özellikler
1. Filtreleme (Basit)
bash
curl -X POST http://localhost:6333/collections/my_collection/points/search \
-H "Content-Type: application/json" \
-d '{
"vector": [0.1, 0.2, 0.3, 0.4],
"top": 3,
"filter": {
"must": [
{ "key": "city", "match": { "value": "istanbul" } }
]
}
}'
2. Filtreleme (Gelişmiş)
curl -X POST http://localhost:6333/collections/my_collection/points/search \
-H "Content-Type: application/json" \
-d '{
"vector": [0.1, 0.2, 0.3, 0.4],
"top": 3,
"filter": {
"must": [
{ "key": "city", "match": { "value": "istanbul" } },
{ "key": "population", "range": { "gte": 1000000 } }
]
}
}'
3. Çoklu Vektör Arama (Multivector Search)
curl -X POST http://localhost:6333/collections/ibrahim/points/search/multi \
-H "Content-Type: application/json" \
-d '{
"multi_vector": {
"title": [0.1, 0.2, 0.3, 0.4],
"body": [0.5, 0.6, 0.7, 0.8]
},
"top": 2
}'
4. Seyrek Vektör Arama (Sparse Vector Search)
curl -X PUT http://localhost:6333/collections/my_collection/points \
-H "Content-Type: application/json" \
-d '{
"points": [
{
"id": 1,
"vector": [0.1, 0.2, 0.3, 0.4],
"sparse_vector": {
"indices": [2, 5, 8],
"values": [0.3, 0.6, 0.1]
},
"payload": {
"description": "adana kebap"
}
}
]
}'
5. Hibrit Arama (Dense + Sparse)
curl -X POST http://localhost:6333/collections/ibrahim/points/search/multi \
-H "Content-Type: application/json" \
-d '{
"vector": [0.1, 0.2, 0.3, 0.4],
"sparse_vector": {
"indices": [1, 2],
"values": [0.5, 0.6]
},
"top": 3
}'
6. Çoklu Kullanıcı Desteği (Multitenancy)
# Tenant'a özel koleksiyon oluşturma
curl -X PUT "http://localhost:6333/collections/my_collection?tenant=user1" \
-H "Content-Type: application/json" \
-d '{
"vectors": {
"size": 4,
"distance": "Cosine"
}
}'
# Tenant'a veri ekleme
curl -X PUT "http://localhost:6333/collections/my_collection/points?tenant=user1" \
-H "Content-Type: application/json" \
-d '{
"points": [
{"id": 1, "vector": [0.2, 0.1, 0.9, 0.7], "payload": {"user": "user1"}}
]
}'# Tenant için arama yapma
curl -X POST "http://localhost:6333/collections/my_collection/points/search?tenant=user1" \
-H "Content-Type: application/json" \
-d '{
"vector": [0.2, 0.1, 0.9, 0.7],
"top": 3
}'
Yorum gönder