From ce52a78536b11a30de06263608dcf28d69e112c1 Mon Sep 17 00:00:00 2001 From: Gautham Krithiwas Date: Mon, 9 Feb 2026 09:25:14 +0530 Subject: [PATCH] handle nil multiSearchParams properly --- index_alias_impl.go | 19 ++++++++++++++----- index_alias_impl_test.go | 25 +++++++++---------------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/index_alias_impl.go b/index_alias_impl.go index 8212c74b9..451a8a910 100644 --- a/index_alias_impl.go +++ b/index_alias_impl.go @@ -985,6 +985,15 @@ func MultiSearch(ctx context.Context, req *SearchRequest, params *multiSearchPar searchStart := time.Now() asyncResults := make(chan *asyncSearchResult, len(indexes)) + var preSearchData map[string]map[string]interface{} + var rescorer *rescorer + var fusionKnnHits search.DocumentMatchCollection + if params != nil { + preSearchData = params.preSearchData + rescorer = params.rescorer + fusionKnnHits = params.fusionKnnHits + } + var reverseQueryExecution bool if req.SearchBefore != nil { reverseQueryExecution = true @@ -1006,8 +1015,8 @@ func MultiSearch(ctx context.Context, req *SearchRequest, params *multiSearchPar waitGroup.Add(len(indexes)) for _, in := range indexes { var payload map[string]interface{} - if params.preSearchData != nil { - payload = params.preSearchData[in.Name()] + if preSearchData != nil { + payload = preSearchData[in.Name()] } go searchChildIndex(in, createChildSearchRequest(req, payload)) } @@ -1047,9 +1056,9 @@ func MultiSearch(ctx context.Context, req *SearchRequest, params *multiSearchPar } } - if params.rescorer != nil { - sr.Hits, sr.Total, sr.MaxScore = params.rescorer.rescore(sr.Hits, params.fusionKnnHits) - params.rescorer.restoreSearchRequest() + if rescorer != nil { + sr.Hits, sr.Total, sr.MaxScore = rescorer.rescore(sr.Hits, fusionKnnHits) + rescorer.restoreSearchRequest() } sr.Hits = hitsInCurrentPage(req, sr.Hits) diff --git a/index_alias_impl_test.go b/index_alias_impl_test.go index dcb1c1cb3..0480139af 100644 --- a/index_alias_impl_test.go +++ b/index_alias_impl_test.go @@ -594,8 +594,7 @@ func TestMultiSearchNoError(t *testing.T) { MaxScore: 2.0, } - multiSearchParams := &multiSearchParams{nil, nil, nil} - results, err := MultiSearch(context.Background(), sr, multiSearchParams, ei1, ei2) + results, err := MultiSearch(context.Background(), sr, nil, ei1, ei2) if err != nil { t.Error(err) } @@ -626,8 +625,7 @@ func TestMultiSearchSomeError(t *testing.T) { }} ei2 := &stubIndex{name: "ei2", err: fmt.Errorf("deliberate error")} sr := NewSearchRequest(NewTermQuery("test")) - multiSearchParams := &multiSearchParams{nil, nil, nil} - res, err := MultiSearch(context.Background(), sr, multiSearchParams, ei1, ei2) + res, err := MultiSearch(context.Background(), sr, nil, ei1, ei2) if err != nil { t.Errorf("expected no error, got %v", err) } @@ -654,8 +652,7 @@ func TestMultiSearchAllError(t *testing.T) { ei1 := &stubIndex{name: "ei1", err: fmt.Errorf("deliberate error")} ei2 := &stubIndex{name: "ei2", err: fmt.Errorf("deliberate error")} sr := NewSearchRequest(NewTermQuery("test")) - multiSearchParams := &multiSearchParams{nil, nil, nil} - res, err := MultiSearch(context.Background(), sr, multiSearchParams, ei1, ei2) + res, err := MultiSearch(context.Background(), sr, nil, ei1, ei2) if err != nil { t.Errorf("expected no error, got %v", err) } @@ -711,8 +708,7 @@ func TestMultiSearchSecondPage(t *testing.T) { checkRequest: checkRequest, } sr := NewSearchRequestOptions(NewTermQuery("test"), 10, 10, false) - multiSearchParams := &multiSearchParams{nil, nil, nil} - _, err := MultiSearch(context.Background(), sr, multiSearchParams, ei1, ei2) + _, err := MultiSearch(context.Background(), sr, nil, ei1, ei2) if err != nil { t.Errorf("unexpected error %v", err) } @@ -791,8 +787,7 @@ func TestMultiSearchTimeout(t *testing.T) { defer cancel() query := NewTermQuery("test") sr := NewSearchRequest(query) - multiSearchParams := &multiSearchParams{nil, nil, nil} - res, err := MultiSearch(ctx, sr, multiSearchParams, ei1, ei2) + res, err := MultiSearch(ctx, sr, nil, ei1, ei2) if err != nil { t.Errorf("expected no error, got %v", err) } @@ -812,7 +807,7 @@ func TestMultiSearchTimeout(t *testing.T) { // now run a search again with an absurdly low timeout (should timeout) ctx, cancel = context.WithTimeout(context.Background(), 1*time.Microsecond) defer cancel() - res, err = MultiSearch(ctx, sr, multiSearchParams, ei1, ei2) + res, err = MultiSearch(ctx, sr, nil, ei1, ei2) if err != nil { t.Errorf("expected no error, got %v", err) } @@ -839,7 +834,7 @@ func TestMultiSearchTimeout(t *testing.T) { // now run a search again with a normal timeout, but cancel it first ctx, cancel = context.WithTimeout(context.Background(), 5*time.Second) cancel() - res, err = MultiSearch(ctx, sr, multiSearchParams, ei1, ei2) + res, err = MultiSearch(ctx, sr, nil, ei1, ei2) if err != nil { t.Errorf("expected no error, got %v", err) } @@ -974,8 +969,7 @@ func TestMultiSearchTimeoutPartial(t *testing.T) { MaxScore: 2.0, } - multiSearchParams := &multiSearchParams{nil, nil, nil} - res, err := MultiSearch(ctx, sr, multiSearchParams, ei1, ei2, ei3) + res, err := MultiSearch(ctx, sr, nil, ei1, ei2, ei3) if err != nil { t.Fatalf("expected no err, got %v", err) } @@ -1233,8 +1227,7 @@ func TestMultiSearchCustomSort(t *testing.T) { MaxScore: 3.0, } - multiSearchParams := &multiSearchParams{nil, nil, nil} - results, err := MultiSearch(context.Background(), sr, multiSearchParams, ei1, ei2) + results, err := MultiSearch(context.Background(), sr, nil, ei1, ei2) if err != nil { t.Error(err) }