diff options
| author | Julie Qiu <julie@golang.org> | 2021-08-06 09:52:55 -0400 |
|---|---|---|
| committer | Julie Qiu <julie@golang.org> | 2021-08-12 15:07:48 +0000 |
| commit | 5e1bf620d930fac4d46bb87fbde026b0985f85d8 (patch) | |
| tree | 49ad59e920a24bdaf0e0eaa64814f161fd788d93 /internal/postgres | |
| parent | 50a9bb29fcbd615d6bb2933dc05f468ca8906d73 (diff) | |
| download | go-x-pkgsite-5e1bf620d930fac4d46bb87fbde026b0985f85d8.tar.xz | |
internal/postgres: dedupe symbolsearch merged results
When merging search results from two parallel queries, it is possible
for the same result to be returned by each query. These results are now
deduped.
For golang/go#44142
Change-Id: I3af41acdb6ad17a37165742f42318bda1813ae47
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/340392
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
Diffstat (limited to 'internal/postgres')
| -rw-r--r-- | internal/postgres/symbolsearch.go | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/internal/postgres/symbolsearch.go b/internal/postgres/symbolsearch.go index d86ae3f7..9247e557 100644 --- a/internal/postgres/symbolsearch.go +++ b/internal/postgres/symbolsearch.go @@ -187,8 +187,15 @@ func runSymbolSearchMultiWord(ctx context.Context, ddb *database.DB, q string, l func mergedResults(resultsArray [][]*SearchResult, limit int) []*SearchResult { var results []*SearchResult - for _, r := range resultsArray { - results = append(results, r...) + deduped := map[string]bool{} + for _, array := range resultsArray { + for _, r := range array { + key := fmt.Sprintf("%s@%s", r.PackagePath, r.SymbolName) + if !deduped[key] { + results = append(results, r) + deduped[key] = true + } + } } sort.Slice(results, func(i, j int) bool { return results[i].NumImportedBy > results[j].NumImportedBy }) if len(results) > limit { |
