index-parameters.md

reference

← Back to skill

Content hash: 72ca49405447e60e5bec5401f9cd7f52790bee6a6d87649061be7cdce9309ea9
## Vector Index Parameter Reference

### HNSW parameters
| Param | When to set | Typical range | Effect of increase |
|-------|-------------|---------------|-------------------|
| `M` | Build time | 5-100 (default 16-32) | Better recall, more memory, slower build |
| `efConstruction` | Build time (before add) | 100-400 | Better graph quality, slower build |
| `efSearch` | Query time | 50-500 | Better recall, slower query |

### IVF parameters
| Param | When to set | Typical range | Effect of increase |
|-------|-------------|---------------|-------------------|
| `nlist` | Build time | sqrt(N) ~ N/39 | More cells, faster build, lower recall |
| `nprobe` | Query time | 1-100 | Better recall, slower query |

### PQ parameters
| Param | Meaning | Tradeoff |
|-------|---------|----------|
| `M` (subquantizers) | Split vector into M parts | More = finer, more memory |
| `nbits` (bits/code) | 4-8 bits per subvector | More = higher recall, more memory |

### Engine-specific syntax
```python
# Faiss
index = faiss.IndexHNSWFlat(d, M=32)
index.hnsw.efConstruction = 200
index.add(vectors)
index.hnsw.efSearch = 100

# pgvector
CREATE INDEX ON items USING hnsw (embedding vector_cosine_ops)
  WITH (m = 16, ef_construction = 200);
SET hnsw.ef_search = 100;

# Milvus
index_params = {
    "index_type": "HNSW",
    "metric_type": "COSINE",
    "params": {"M": 16, "efConstruction": 200}
}
search_params = {"ef": 100}
```

### Tuning procedure
1. Build labeled eval set (query -> known-relevant neighbors)
2. Start from engine defaults; measure recall@k + p99 latency
3. Low recall? Raise `efSearch`/`nprobe` first (query-only, cheap)
4. Still low? Raise `M`/`efConstruction` (rebuild)
5. Stop at lowest-cost config meeting recall floor
6. Re-eval on held-out set (not train set) after every change

### Distance metric consistency
- Cosine = inner product on L2-normalized vectors
- Normalize once at ingest, again on query vector
- Never mix metrics between index and query