MCPcopy Create free account
hub / github.com/53AI/53AIHub / Search

Method Search

api/service/rag/search.go:173–335  ·  view source on GitHub ↗

Search 统一搜索接口

(eid int64, req *SearchRequest, userID *int64)

Source from the content-addressed store, hash-verified

171
172// Search 统一搜索接口
173func (s *SearchService) Search(eid int64, req *SearchRequest, userID *int64) (*SearchResponse, error) {
174 startTime := time.Now()
175
176 if req == nil {
177 return nil, fmt.Errorf("搜索请求不能为空")
178 }
179
180 // 设置默认值
181 if req.TopK <= 0 {
182 req.TopK = 10
183 }
184 if req.SearchType == "" {
185 req.SearchType = "vector"
186 }
187
188 originalReq := cloneSearchRequest(req)
189 if originalReq == nil {
190 originalReq = &SearchRequest{}
191 }
192 searchTrace := newSearchTimingRecorder()
193 originalReq.trace = searchTrace
194 configService := NewChunkConfigService(s.db)
195 narrowedReq := cloneSearchRequest(originalReq)
196 if narrowedReq == nil {
197 narrowedReq = &SearchRequest{}
198 }
199 entityMeta := &entityScopeNarrowMeta{}
200 scopeNarrowStart := time.Now()
201 if !narrowedReq.SkipEntityScopeNarrowing {
202 var narrowErr error
203 entityMeta, narrowErr = s.applyEntityScopeNarrowingWithMeta(eid, narrowedReq)
204 if narrowErr != nil {
205 logger.SysDebugf("【实体范围】实体收窄失败,回退原始请求: eid=%d, err=%v", eid, narrowErr)
206 narrowedReq = cloneSearchRequest(originalReq)
207 if narrowedReq == nil {
208 narrowedReq = &SearchRequest{}
209 }
210 entityMeta = &entityScopeNarrowMeta{}
211 }
212 } else {
213 logger.SysDebugf("【实体范围】跳过实体收窄: eid=%d, query=%q, file_count=%d",
214 eid, truncateForDebug(narrowedReq.Query, 256), len(narrowedReq.FileIDs))
215 }
216 searchTrace.add("scope_narrowing_ms", time.Since(scopeNarrowStart))
217 if entityMeta == nil {
218 entityMeta = &entityScopeNarrowMeta{}
219 }
220
221 effectiveReq := normalizeSearchRequestForExecution(narrowedReq)
222 if effectiveReq == nil {
223 effectiveReq = &SearchRequest{}
224 }
225
226 logger.SysDebugf(
227 "【实体范围】摘要: eid=%d, 种子实体数=%d, 分片候选数=%d, 请求内容=%q, 检索类型=%s, 取回数量=%d, 文件数=%d, 分片数=%d",
228 eid,
229 len(entityMeta.SeedEntities),
230 entityMeta.ChunkCandidateCount,

Callers 6

SearchKnowledgeMethod · 0.95
SearchFunction · 0.95
VectorSearchFunction · 0.95
FulltextSearchFunction · 0.95
HybridSearchFunction · 0.95
SearchMethod · 0.95

Calls 15

vectorSearchMethod · 0.95
fulltextSearchMethod · 0.95
hybridSearchMethod · 0.95
filterDeletedFilesMethod · 0.95
saveQueryRecordMethod · 0.95
newSearchTimingRecorderFunction · 0.85
NewChunkConfigServiceFunction · 0.85

Tested by

no test coverage detected