Tencent/WeKnora · error
failed to delete chunk vectors: %w
Error message
failed to delete chunk vectors: %w
What it means
executeFAQImport wraps errors from deleteFAQChunkVectors when removing the vector index entries for deleted FAQ chunks. This runs after the DB delete succeeded, so a failure leaves orphaned vectors in the vector store with no corresponding DB chunks. The cause is the vector-store/service error preserved by %w.
Source
Thrown at internal/application/service/knowledge_faq_import.go:1424
faqKnowledge.ID,
payload.Entries,
)
if err != nil {
return fmt.Errorf("failed to calculate replace operations: %w", err)
}
// 删除需要删除的chunks(包括需要更新的旧chunks)
if len(chunksToDelete) > 0 {
chunkIDsToDelete := make([]string, 0, len(chunksToDelete))
for _, chunk := range chunksToDelete {
chunkIDsToDelete = append(chunkIDsToDelete, chunk.ID)
}
if err := s.chunkRepo.DeleteChunks(ctx, tenantID, chunkIDsToDelete); err != nil {
return fmt.Errorf("failed to delete chunks: %w", err)
}
// 删除索引
if err := s.deleteFAQChunkVectors(ctx, kb, faqKnowledge, chunksToDelete); err != nil {
return fmt.Errorf("failed to delete chunk vectors: %w", err)
}
logger.Infof(ctx, "FAQ import task %s: deleted %d chunks (including updates)", taskID, len(chunksToDelete))
}
} else {
// Append 模式(智能合并):标准问已存在的条目走 merge ops,其余作为新建。
var mergeOps []faqMergeOperation
entriesToProcess, mergeOps, skippedCount, err = s.calculateAppendOperations(ctx, tenantID, kb.ID, payload.Entries)
if err != nil {
return fmt.Errorf("failed to calculate append operations: %w", err)
}
if len(mergeOps) > 0 {
mergedCount, mergeErr := s.executeFAQMergeOperations(ctx, taskID, kb, faqKnowledge, embeddingModel, indexMode, mergeOps, progress)
if mergeErr != nil {
return fmt.Errorf("failed to execute merge operations: %w", mergeErr)
}
logger.Infof(ctx, "FAQ import task %s: merged %d entries", taskID, mergedCount)
progress.MergedCount = mergedCountView on GitHub (pinned to 988cbb0330)
Solutions
- Check vector-store connectivity, credentials, and that the target collection exists
- Inspect the wrapped cause to distinguish auth vs network vs not-found errors
- Manually reconcile/delete orphaned vectors for the affected knowledge base
- Retry the import; add cleanup of orphaned vectors if the DB delete already succeeded
Example fix
// before
if err := s.deleteFAQChunkVectors(ctx, kb, faqKnowledge, chunksToDelete); err != nil {
return fmt.Errorf("failed to delete chunk vectors: %w", err)
}
// after
if err := s.deleteFAQChunkVectors(ctx, kb, faqKnowledge, chunksToDelete); err != nil {
logger.Errorf(ctx, "orphaned vectors possible for kb=%s: %v", kb.ID, err)
return fmt.Errorf("failed to delete chunk vectors: %w", err)
} Defensive patterns
Strategy: fallback
Validate before calling
// Preflight: verify the vector collection/index is reachable before replace import
if err := vectorStore.Ping(ctx); err != nil {
return fmt.Errorf("vector store unavailable, postpone import: %w", err)
}
if exists, _ := vectorStore.CollectionExists(ctx, collectionFor(kb)); !exists {
return fmt.Errorf("vector collection for kb %s missing", kb.ID)
} Try / catch
err := runReplaceImport(ctx, req)
if err != nil && strings.Contains(err.Error(), "failed to delete chunk vectors") {
// DB rows already deleted: schedule orphan-vector cleanup, don't fail the task silently
scheduleOrphanVectorCleanup(kb)
return err
}
return err Prevention
- Recreate the vector collection if the embedding model for the KB changed
- Monitor vector-store health and credentials alongside the DB
- Implement a periodic reconciliation job deleting vectors without DB chunks
- Order operations to tolerate vector cleanup failure with compensating cleanup
When it happens
Trigger: Replace-mode import with chunksToDelete non-empty; deleteFAQChunkVectors fails due to vector DB (e.g., Milvus/Qdrant) unavailability, authentication errors, network timeouts, or missing collection/index for the knowledge base.
Common situations: Vector database outage or restart; collection dropped or renamed while FAQ knowledge references it; wrong vector-store credentials in env config; embedding model changed so vectors live in a different collection.
Related errors
- failed to index questions: %w
- failed to index chunk: %w
- failed to list existing FAQ chunks: %w
- failed to get knowledge: %w
- failed to list existing chunks: %w
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/21c57ff547347de7.
Report an issue: GitHub.