mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-06-29 23:41:12 +08:00
### What problem does this PR solve? - added the new dataset search route and handler - reused the existing shared SearchDatasets service by adapting single-dataset requests into dataset_ids=[dataset_id] - aligned handler error responses with Python behavior for argument/data errors - aligned key service error messages such as invalid search_id and mixed embedding models - added focused handler and service tests for request mapping and error behavior ### Tests: `/usr/local/go/bin/go test ./internal/service -run 'TestSearchDatasetRequestToSearchDatasetsRequest|TestDatasetServiceSearchDatasets'` `/usr/local/go/bin/go test ./internal/handler -run 'TestDatasetsHandlerSearchDataset'`
51 lines
2.0 KiB
Go
51 lines
2.0 KiB
Go
package service
|
|
|
|
import "testing"
|
|
|
|
func TestSearchDatasetRequestToSearchDatasetsRequest(t *testing.T) {
|
|
page := 2
|
|
size := 15
|
|
topK := 128
|
|
useKG := true
|
|
keyword := true
|
|
similarityThreshold := 0.42
|
|
vectorSimilarityWeight := 0.8
|
|
searchID := "search-1"
|
|
rerankID := "rerank-1"
|
|
req := &SearchDatasetRequest{
|
|
Question: "hello world",
|
|
Page: &page,
|
|
Size: &size,
|
|
DocIDs: []string{"doc-1", "doc-2"},
|
|
UseKG: &useKG,
|
|
TopK: &topK,
|
|
CrossLanguages: []string{"en", "zh"},
|
|
SearchID: &searchID,
|
|
MetadataFilter: map[string]interface{}{"method": "manual"},
|
|
RerankID: &rerankID,
|
|
Keyword: &keyword,
|
|
SimilarityThreshold: &similarityThreshold,
|
|
VectorSimilarityWeight: &vectorSimilarityWeight,
|
|
}
|
|
|
|
converted := req.ToSearchDatasetsRequest("dataset-1")
|
|
if len(converted.DatasetIDs) != 1 || converted.DatasetIDs[0] != "dataset-1" {
|
|
t.Fatalf("dataset_ids=%v want [dataset-1]", converted.DatasetIDs)
|
|
}
|
|
if converted.Question != req.Question || converted.Page != req.Page || converted.Size != req.Size {
|
|
t.Fatalf("converted request did not preserve pagination/question fields: %#v", converted)
|
|
}
|
|
if len(converted.DocIDs) != 2 || converted.DocIDs[0] != "doc-1" || converted.DocIDs[1] != "doc-2" {
|
|
t.Fatalf("doc_ids=%v want [doc-1 doc-2]", converted.DocIDs)
|
|
}
|
|
if converted.UseKG != req.UseKG || converted.TopK != req.TopK || converted.SearchID != req.SearchID {
|
|
t.Fatalf("converted request did not preserve optional fields: %#v", converted)
|
|
}
|
|
if converted.MetadataFilter["method"] != "manual" || converted.RerankID != req.RerankID || converted.Keyword != req.Keyword {
|
|
t.Fatalf("converted request did not preserve search config fields: %#v", converted)
|
|
}
|
|
if converted.SimilarityThreshold != req.SimilarityThreshold || converted.VectorSimilarityWeight != req.VectorSimilarityWeight {
|
|
t.Fatalf("converted request did not preserve thresholds: %#v", converted)
|
|
}
|
|
}
|