```go title="Go" package main import ( "fmt" "github.com/kreuzberg-dev/kreuzberg/packages/go/v5" ) type VectorRecord struct { ID string Embedding []float32 Content string Metadata map[string]string } func extractAndVectorize(documentPath string, documentID string) ([]VectorRecord, error) { maxChars := 512 maxOverlap := 50 normalize := true batchSize := int32(32) config := &kreuzberg.ExtractionConfig{ Chunking: &kreuzberg.ChunkingConfig{ MaxChars: &maxChars, MaxOverlap: &maxOverlap, Embedding: &kreuzberg.EmbeddingConfig{ Model: kreuzberg.EmbeddingModelType_Preset("balanced"), Normalize: &normalize, BatchSize: &batchSize, }, }, } result, err := kreuzberg.ExtractFileSync(documentPath, config) if err != nil { return nil, err } var vectorRecords []VectorRecord for index, chunk := range result.Chunks { record := VectorRecord{ ID: fmt.Sprintf("%s_chunk_%d", documentID, index), Content: chunk.Content, Embedding: chunk.Embedding, Metadata: map[string]string{ "document_id": documentID, "chunk_index": fmt.Sprintf("%d", index), "content_length": fmt.Sprintf("%d", len(chunk.Content)), }, } vectorRecords = append(vectorRecords, record) } storeInVectorDatabase(vectorRecords) return vectorRecords, nil } func storeInVectorDatabase(records []VectorRecord) { for _, record := range records { if len(record.Embedding) > 0 { fmt.Printf("Storing %s: %d chars, %d dims\n", record.ID, len(record.Content), len(record.Embedding)) } } } ```