← Back to list

Milvus’ta İndeksleme: FLAT, IVF, HNSW ve DiskANN’e Giriş

Merak ettiğiniz dokümanları tarayıp sizinle sorularınızın cevaplarını verip tarışabileceğiniz bir ajan tasarladınız, ilk birkaç bin…

Pelin Gökkaya · 2026-07-07 15:44 · 0 claps · 4.8 min read
#vector-database #retrieval-augmented-gen #llm #milvus
Open on Medium ↗
Wiki topics: LLM · Large Language Models RAG · RAG & Retrieval

Milvus’ta İndeksleme: FLAT, IVF, HNSW ve DiskANN’e Giriş

Merak ettiğiniz dokümanları tarayıp sizinle sorularınızın cevaplarını verip tarışabileceğiniz bir ajan tasarladınız, ilk birkaç bin dokümanda retrival çok iyi çalıştı ve her şey kusursuz görünüyor. Peki ya veri kümeniz birkaç milyon, hatta birkaç milyar vektöre ulaştığında ne olacak, retrival kalitesi yerinde mi sayacak yoksa kötüleşecek mi? Bu durumda tek yapılması gereken daha yüksek parametreli bir LLM modeli mi kullanmak? Milvus’un derinliklerine inmeden açıklamak istediğim iki başlık var, gelin bu iki başlık hakkında tartışalım.

İlk akla gelen çözüm oldukça basit, yeni gelen sorgu vektörünü veritabanındaki her vektörle tek tek karşılaştırmak. Fakat bu, bir şehirde kaybettiğiniz arkadaşınızı bulmak için her kapıyı tek tek çalmaya benzer. Sonunda doğru kişiyi bulursunuz, ancak harcadığınız zaman kritik düzeydedir. Burada önemli bir çıkarım devreye giriyor; modern arama sistemlerinin ihtiyacı yalnızca doğru cevabı bulmak değil, bunu birkaç milisaniye içinde yapabilmek.

İşte bu noktada yaklaşık en yakın komşu (Approximate Nearest Neighbor — ANN) algoritmaları devreye giriyor. Bu algoritmalar “Her yere bakma doğru yere bak” fikri üzerine kurulu. Ama bunu nasıl başarıyorlar? Aynı probleme farklı bakış açıları geliştiren onlarca yöntem olsa da, bu yazıda değineceğim iki yaklaşım var: HNSW ve DiskANN.

HNSW’yi devasa bir sosyal ağ gibi düşünebilir. Her insanın yalnızca birkaç kişiyi tanıdığını ve bağlantısı olduğunu varsayalım, bu bağlantılar sayesinde hiç tanımadığınız birine şaşırtıcı derecede kısa bir yol izleyerek ulaşabilirsiniz. Eğer İstanbul’da yaşayan bir yazılım mühendisine ulaşmanız gerekiyorsa, bütün Türkiye’yi tek tek dolaşmak yerine bir arkadaşınıza sorarsınız, o sizi başka bir arkadaşına yönlendirir ve her adımda hedefe biraz daha yaklaşırsınız. HNSW de tam olarak bunu yapıyor. Her vektör yalnızca en yakın komşularıyla bağlantılı ve algoritma bu bağlantılar üzerinde ilerleyerek hedefe hızla ulaşıyor, milyonlarca vektörün tamamını taramak yerine, akıllıca seçilmiş komşular arasında dolaşıyor.

Peki ya veri kümesi artık belleğe sığmayacak kadar büyükse? Diyelim ki elinizde milyarlarca vektör var ve bunların tamamını RAM’de tutmanız mümkün değil. İşte burada DiskANN devreye giriyor. Bunu devasa bir şehir kütüphanesi gibi düşünebilirsiniz, en sık kullanılan kitaplar masanın üzerindedir; daha az kullanılanlar ise arşiv odalarında durur. Bir kitap istediğinizde bütün arşivi masaya taşımazsınız. Yalnızca ihtiyaç duyduğunuz raf açılır, kitap getirilir ve aramanıza devam edersiniz. DiskANN de benzer şekilde, indeksin yalnızca kritik bölümlerini RAM’de tutarken geri kalanını SSD üzerinde saklar. Böylece belleğe sığmayacak büyüklükteki veri kümelerinde bile oldukça düşük gecikmeyle arama yapabilir.

İlginç olan ise şudur: Her iki algoritma da aynı problemi çözer; ancak biri belleğin hızını sonuna kadar kullanırken diğeri depolama alanının sınırlarını zorlar. Birisi “En hızlı nasıl ararım?” sorusuna odaklanırken, diğeri “RAM’e sığmayan veriyi nasıl hızlı ararım?” sorusuna cevap verir. Modern vektör veritabanlarının başarısının arkasında da tam olarak bu mühendislik tercihleri yatmaktadır.

İşte tam bu noktada Milvus devreye giriyor.

HNSW ve DiskANN birer teori değil, Milvus’ta seçebileceğiniz somut index tipleri. Ama Milvus’un sunduğu liste bu ikisiyle sınırlı değil. Kaba kuvvetten GPU’ya, kümeleme tabanlı yaklaşımlardan sparse vektörlere kadar uzanan geniş bir index yelpazesi var — her biri farklı bir veri profiline, farklı bir donanım kısıtına cevap veriyor.

Peki bir vektör veritabanı bu kadar çok seçeneği neden sunar? Çünkü “en iyi index” diye bir şey yok. Sorunuz küçük ve exact sonuç mu istiyor, yoksa milyarlarca vektörde saniyenin altında mı arama yapmanız gerekiyor — cevap her seferinde değişiyor. Milvus’un mimarisini anlamak, aslında bu soruya doğru cevabı verebilmek demek.

Milvus’ta Desteklenen İndeks Türleri

Milvus, yalnızca dense embedding’leri değil; binary vektörlerden sparse vektörlere, hatta klasik sayısal ve metinsel alanlara kadar farklı veri tipleri için optimize edilmiş indeksler sunar. Her indeks ailesi, farklı bir veri yapısını ve farklı bir sorgu senaryosunu hedefler.

1. Dense Float Vektörler — CPU

Bu grup, günümüzde en yaygın kullanılan embedding’ler için geliştirilmiştir. OpenAI, BGE, E5, Sentence Transformers gibi modellerden elde edilen yoğun (dense) vektörler bu kategoride yer alır. Milvus’un en çok kullanılan indeksleri (FLAT, IVF, HNSW ve DiskANN) bu veri tipi üzerinde çalışır. RAG sistemleri, semantik arama ve benzerlik tabanlı uygulamaların büyük çoğunluğu bu indeks ailesini kullanır.

  • FLAT — Kaba kuvvet (Brute Force) araması. %100 doğruluk (recall), eğitim gerektirmez. Küçük veri kümeleri (<1 milyon vektör) için idealdir.
  • IVF_FLAT — Kümelendirme (Inverted File) tabanlı indeks. Vektörleri kümelere ayırır, yalnızca ilgili kümelerde arama yapar.
  • IVF_SQ8 — Scalar Quantization kullanan IVF. Daha az bellek tüketir, küçük doğruluk kaybı yaşanabilir.
  • IVF_PQ — Product Quantization kullanan IVF. En yüksek sıkıştırma oranını sağlar.
  • HNSW — Katmanlı grafik (graph) tabanlı indeks. Bellek içi (in-memory) veri kümeleri için hız ve doğruluk açısından en dengeli seçenektir.
  • DISKANN — Disk tabanlı ANN algoritması. RAM’e sığmayan çok büyük veri kümeleri için geliştirilmiştir.
  • AUTOINDEX — Milvus’un veri yapısına göre uygun indeksi otomatik seçmesini sağlar.
  • SCANN — Google’ın geliştirdiği Scalable Nearest Neighbors algoritması. Yüksek doğruluk ve rekabetçi sorgu hızları sunar.
  • HNSW_SQ — Scalar Quantization kullanan HNSW. Daha düşük bellek kullanımı sağlar.
  • HNSW_PQ — Product Quantization kullanan HNSW. Belleği daha da azaltırken küçük doğruluk kaybı oluşturabilir.
  • HNSW_PRQ — Product Residual Quantization kullanan HNSW. Sıkıştırılmış HNSW ailesi içinde en yüksek doğruluğu hedefler.
  • IVF_RABITQ — RaBitQ ikili kuantalama kullanan IVF. Çok düşük bellek tüketimiyle rekabetçi doğruluk sunar.

2. Dense Float Vektörler — GPU

CPU üzerinde çalışan indekslerin, NVIDIA GPU’lar için optimize edilmiş sürümleridir. Aynı algoritmaları kullanmalarına rağmen binlerce işlemi paralel gerçekleştirebildikleri için çok daha yüksek sorgu performansı sunarlar. Özellikle milyonlarca sorgunun işlendiği büyük ölçekli sistemlerde ve gerçek zamanlı uygulamalarda tercih edilirler.

  • GPU_IVF_FLAT — GPU hızlandırmalı IVF_FLAT.
  • GPU_IVF_PQ — GPU hızlandırmalı IVF_PQ.
  • GPU_BRUTE_FORCE — GPU üzerinde tam (exact) arama.
  • GPU_CAGRA — NVIDIA’nın GPU’ya özel graph tabanlı ANN algoritması. Büyük ölçekli GPU iş yüklerinde en yüksek sorgu performansını sunar.

3. Binary Vektörler

Bazı uygulamalarda embedding’ler ondalıklı (float) sayılar yerine yalnızca 0 ve 1 değerlerinden oluşur. Bu tür binary vektörlerde Öklid veya Kosinüs benzerliği yerine Hamming Distance ya da Jaccard Similarity gibi farklı benzerlik metrikleri kullanılır. Milvus, bu veri yapıları için özel olarak optimize edilmiş binary indeksler sunar.

  • BIN_FLAT — Binary vektörlerde tam (exact) arama.
  • BIN_IVF_FLAT — Binary vektörler için IVF tabanlı arama.
  • MINHASH_LSH — Jaccard benzerliği kullanan binary veriler için MinHash tabanlı Locality Sensitive Hashing (LSH).

4. Skaler Alanlar (Scalar Fields)

Vektör veritabanlarında yalnızca embedding’ler bulunmaz. Dokümanın başlığı, yayın tarihi, kategori, kullanıcı kimliği veya durum bilgisi gibi klasik alanlar da saklanır. Scalar indeksler bu alanlar üzerinde filtreleme ve aralık sorgularını hızlandırır. Örneğin yalnızca 2025 yılında yayınlanan, hukuk kategorisindeki belgeler arasında vektör araması yapmak istediğinizde bu indeksler devreye girer.

  • TRIE — Metin alanlarında (VARCHAR) önek (prefix) aramaları için kullanılan ağaç yapısı.
  • STL_SORT — Sayısal alanlarda sıralı indeks. Aralık (range) sorgularında etkilidir.
  • INVERTED — Genel amaçlı ters indeks. Çoğu skaler veri tipiyle uyumludur.
  • BITMAP — Düşük kardinaliteli alanlar (ör. durum kodları, boolean değerler) için optimize edilmiştir.
  • NGRAM — Metin içerisinde geçen ifadeleri (LIKE '%kelime%') hızlı bulmak için kullanılan N-Gram indeksi.

5. Sparse Vektörler

Sparse (seyrek) vektörlerde boyut sayısı çok yüksektir ancak değerlerin büyük kısmı sıfırdır. BM25, SPLADE ve benzeri bilgi erişim yöntemleri bu yapıyı kullanır. Milvus, yalnızca sıfır olmayan bileşenleri işleyerek hem bellek kullanımını azaltan hem de sorgu performansını artıran özel sparse indeksler sunar. Günümüzde hibrit arama (Hybrid Search) sistemlerinde dense embedding’lerle birlikte sıkça kullanılırlar.

  • SPARSE_INVERTED_INDEX — Sparse vektörler için önerilen varsayılan indeks. En yüksek doğruluk sağlar.
  • SPARSE_WAND — WAND (Weak AND) algoritmasını kullanır. Büyük sonuç kümelerinde daha hızlı çalışır, küçük doğruluk kaybı oluşturabilir.

Bir vektör veritabanının performansını belirleyen tek unsur kullanılan embedding modeli değildir. Aynı embedding’lerle çalışan iki sistem, seçilen indeks yapısına bağlı olarak tamamen farklı gecikme süreleri, bellek tüketimleri ve doğruluk oranları sunabilir.

Milvus da bu nedenle tek bir indeks yerine farklı veri tiplerine ve kullanım senaryolarına uygun geniş bir indeks ailesi sunar. Küçük veri kümeleri için FLAT, orta ölçekli sistemler için IVF, yüksek performanslı bellek içi aramalar için HNSW, RAM’e sığmayan devasa veri kümeleri için ise DiskANN farklı ihtiyaçlara çözüm üretir. Bunun yanında GPU hızlandırmalı indeksler, sparse vektör indeksleri ve scalar alan indeksleri de Milvus’u yalnızca bir vektör veritabanı değil, kapsamlı bir arama altyapısı haline getirir.

Bu yazıda HNSW, DiskANN yöntemleri ve Milvus’un desteklediği indeks ailelerine genel bir bakış attık. Bir sonrakinde görüşmek üzere


메타데이터
post_id
2b4653e67dfe
slug
milvusta-i̇ndeksleme-flat-ivf-hnsw-ve-diskann-e-giriş-2b4653e67dfe
url
https://medium.com/@pelingokkaya1/milvusta-i%CC%87ndeksleme-flat-ivf-hnsw-ve-diskann-e-giri%C5%9F-2b4653e67dfe
canonical_url
https://medium.com/@pelingokkaya1/milvusta-i%CC%87ndeksleme-flat-ivf-hnsw-ve-diskann-e-giri%C5%9F-2b4653e67dfe
author_url
https://medium.com/@pelingokkaya1
status
ok
fetched_at
2026-07-11 21:25:18