1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
type Retriever interface {
Retrieve(ctx context.Context, query string, opts ...Option) ([]*schema.Document, error)
}
func (r *Retriever) Retrieve(ctx context.Context, query string, opts ...retriever.Option) (docs []*schema.Document, err error) {
// ...
docs, err = r.config.SearchMode.Retrieve(ctx, r.client, r.config, query, opts...)
// ...
return docs, nil
}
func (a *Approximate) Retrieve(ctx context.Context, client *milvusclient.Client, conf *milvus2.RetrieverConfig, query string, opts ...retriever.Option) ([]*schema.Document, error) {
if conf.Embedding == nil {
return nil, fmt.Errorf("embedding is required for approximate search")
}
queryVector, err := EmbedQuery(ctx, conf.Embedding, query)
if err != nil {
return nil, err
}
searchOpt, err := a.BuildSearchOption(ctx, conf, queryVector, opts...)
if err != nil {
return nil, fmt.Errorf("failed to build search option: %w", err)
}
result, err := client.Search(ctx, searchOpt)
if err != nil {
return nil, fmt.Errorf("failed to search: %w", err)
}
if len(result) == 0 {
return []*schema.Document{}, nil
}
return conf.DocumentConverter(ctx, result[0])
}
|