# Vector Indexes और Approximate Search — Retrieval-Augmented Generation (RAG)

Source: https://www.geekswithgeeks.com/hi/rag/v-index

> समझें कि बड़े संग्रह approximate nearest-neighbour indexes क्यों उपयोग करते हैं।

## सटीक खोज scale नहीं होती

Query की हर vector से तुलना (**brute force**) सटीक है पर लाखों vectors के लिए धीमी। **Approximate nearest neighbour (ANN)** indexes जैसे **HNSW** (परतदार graph), **IVF** (clusters) और quantised रूप गति और स्मृति के बदले थोड़ा **recall** गँवाकर लगभग-सर्वोत्तम मिलान बहुत तेज़ पाते हैं। कुछ हज़ार chunks के लिए brute force ठीक और सबसे सरल है। बड़े systems vector database या vector-समर्थित search engine उपयोग करते हैं (जैसे pgvector, Elasticsearch/OpenSearch, Qdrant, Milvus, Pinecone, FAISS)। Recall-बनाम-latency settings अपने evaluation set पर tune करें।

## आकार और लागत अंकगणित, चलाकर

मैंने यह सादा-Python (सिर्फ़ standard library) उदाहरण चलाया। दस लाख 768-आयाम float32 vectors लगभग 3.07 GB लेते हैं; brute force की 100 queries को 76.8 अरब गुणा चाहिए; 8-bit quantisation vector भंडारण को चौथाई कर देती है।

```python
import math

# brute-force nearest neighbour cost: queries * documents * dimensions multiplications
docs, dim, queries = 1_000_000, 768, 100
ops = docs * dim * queries
print("multiplications per 100 queries:", f"{ops:,}")
print("float32 index size (GB):", round(docs * dim * 4 / 1e9, 2))
print("with 8-bit quantisation (GB):", round(docs * dim * 1 / 1e9, 2))

```

Output:

```
multiplications per 100 queries: 76,800,000,000
float32 index size (GB): 3.07
with 8-bit quantisation (GB): 0.77
```

## छोटे sets के लिए brute force ठीक है

लगभग 100,000 vectors से कम पर सादी सटीक खोज अक्सर काफ़ी तेज़ होती है और ANN tuning पूरी तरह हटा देती है।

**Quiz:** ANN indexes गति के बदले क्या देते हैं?

- [ ] सारी सटीकता
- [x] थोड़ा recall (वे सच्चा निकटतम पड़ोसी चूक सकते हैं)
- [ ] Metadata रखने की क्षमता
- [ ] भाषा समर्थन

*Answer:* थोड़ा recall (वे सच्चा निकटतम पड़ोसी चूक सकते हैं). Approximate का अर्थ परिणाम लगभग, हमेशा ठीक नहीं, सच्चे शीर्ष मिलान होते हैं।
