MCPcopy Create free account
hub / github.com/astercloud/aster / Search

Method Search

pkg/knowledge/manager.go:450–517  ·  view source on GitHub ↗

Search 搜索知识

(ctx context.Context, query *SearchQuery)

Source from the content-addressed store, hash-verified

448
449// Search 搜索知识
450func (m *manager) Search(ctx context.Context, query *SearchQuery) ([]*SearchResult, error) {
451 if query == nil {
452 return nil, errors.New("knowledge: search query cannot be nil")
453 }
454
455 // 轻量路径:仅使用向量检索,避开复杂策略
456 if m.corePipeline != nil && (query.Strategy == "" || query.Strategy == StrategyVector) {
457 meta := map[string]any{}
458 maps.Copy(meta, query.Filters)
459 if query.Namespace != "" {
460 meta["namespace"] = query.Namespace
461 }
462 hits, err := m.corePipeline.Search(ctx, query.Query, query.MaxResults, meta)
463 if err != nil {
464 return nil, fmt.Errorf("knowledge: core search failed: %w", err)
465 }
466 return convertCoreHits(hits), nil
467 }
468
469 m.mu.RLock()
470 defer m.mu.RUnlock()
471
472 // 设置默认值
473 if query.MaxResults == 0 {
474 query.MaxResults = m.config.MaxResults
475 }
476 if query.Namespace == "" {
477 query.Namespace = m.config.Namespace
478 }
479
480 var results []*SearchResult
481 var err error
482
483 // 根据策略执行搜索
484 switch query.Strategy {
485 case StrategyText:
486 results, err = m.searchText(ctx, query)
487 case StrategyVector:
488 results, err = m.searchVector(ctx, query)
489 case StrategyHybrid:
490 results, err = m.searchHybrid(ctx, query)
491 case StrategyGraph:
492 results, err = m.searchGraph(ctx, query)
493 default:
494 // 默认使用混合搜索
495 query.Strategy = StrategyHybrid
496 results, err = m.searchHybrid(ctx, query)
497 }
498
499 if err != nil {
500 return nil, fmt.Errorf("knowledge: search failed: %w", err)
501 }
502
503 // 应用过滤器
504 results = m.applyFilters(results, query)
505
506 // 限制结果数量
507 if len(results) > query.MaxResults {

Callers 2

SearchSimilarMethod · 0.95
BulkSearchMethod · 0.95

Calls 9

searchTextMethod · 0.95
searchVectorMethod · 0.95
searchHybridMethod · 0.95
searchGraphMethod · 0.95
applyFiltersMethod · 0.95
auditMethod · 0.95
convertCoreHitsFunction · 0.85
CopyMethod · 0.80
SearchMethod · 0.65

Tested by

no test coverage detected