Tencent/WeKnora · error
failed to get messages by knowledge IDs: %w
Error message
failed to get messages by knowledge IDs: %w
What it means
After KB hybrid search returns results, the service maps knowledge IDs back to chat messages via messageRepo.GetMessagesByKnowledgeIDs. A failure in that repository lookup is wrapped here, so KB hits cannot be converted into message results.
Source
Thrown at internal/application/service/message.go:666
// Rerank results if a rerank model is configured
kbResults = s.rerankResults(ctx, rc, params.Query, kbResults)
if len(kbResults) == 0 {
return nil, nil
}
// Map KB search results back to messages via knowledge_id
knowledgeIDs := make([]string, 0, len(kbResults))
scoreByKnowledgeID := make(map[string]float64)
for _, r := range kbResults {
knowledgeIDs = append(knowledgeIDs, r.KnowledgeID)
scoreByKnowledgeID[r.KnowledgeID] = r.Score
}
// Look up messages by their knowledge_id
messages, err := s.messageRepo.GetMessagesByKnowledgeIDs(ctx, knowledgeIDs)
if err != nil {
return nil, fmt.Errorf("failed to get messages by knowledge IDs: %w", err)
}
// Filter by session IDs if specified
sessionFilter := make(map[string]bool)
for _, sid := range params.SessionIDs {
sessionFilter[sid] = true
}
var results []*types.MessageSearchResultItem
for _, msg := range messages {
if len(sessionFilter) > 0 && !sessionFilter[msg.SessionID] {
continue
}
score := scoreByKnowledgeID[msg.KnowledgeID]
results = append(results, &types.MessageSearchResultItem{
MessageWithSession: *msg,
Score: score,
MatchType: "vector",View on GitHub (pinned to 988cbb0330)
Solutions
- Check the wrapped repo error for the concrete DB failure.
- Cap or chunk the knowledgeIDs list sent to GetMessagesByKnowledgeIDs.
- Verify the knowledge_id column and index exist (run pending migrations).
- Retry after transient DB issues; the lookup is read-only.
Example fix
// before
messages, err := s.messageRepo.GetMessagesByKnowledgeIDs(ctx, knowledgeIDs)
if err != nil {
return nil, fmt.Errorf("failed to get messages by knowledge IDs: %w", err)
}
// after
if len(knowledgeIDs) > 500 {
knowledgeIDs = knowledgeIDs[:500]
}
messages, err := s.messageRepo.GetMessagesByKnowledgeIDs(ctx, knowledgeIDs)
if err != nil {
return nil, fmt.Errorf("failed to get messages by knowledge IDs: %w", err)
} Defensive patterns
Strategy: try-catch
Validate before calling
if len(knowledgeIDs) == 0 { return nil, nil } // nothing to look up Try / catch
msgs, err := svc.SearchMessages(ctx, params)
if err != nil && strings.Contains(err.Error(), "messages by knowledge IDs") {
if isTransient(err) { /* retry once */ } else { log.Error(err) }
} Prevention
- Cap KB result count so knowledgeIDs stays within DB parameter limits
- Ensure knowledge_id column/index migrations are applied
- Alert on GetMessagesByKnowledgeIDs error rates
When it happens
Trigger: vectorSearchViaKB (from SearchMessages) when the messages-table query by knowledge IDs fails — DB connection error, timeout, oversized ID list, or missing table/column after migration.
Common situations: Large result sets from the KB producing a huge ID list that trips DB parameter limits; DB outage; schema drift where knowledge_id column/index is missing.
Related errors
- KB hybrid search failed: %w
- knowledge_id is required
- knowledge service is unavailable
- failed to ensure FAQ knowledge: %w
- failed to create chunk: %w
AI-assisted analysis of Tencent/WeKnora@988cbb0330 (2026-09-02).
Data as JSON: /api/errors/cecf7653cc0188f7.
Report an issue: GitHub.