aboutsummaryrefslogtreecommitdiff
path: root/internal/postgres
diff options
context:
space:
mode:
authorJulie Qiu <julie@golang.org>2021-08-06 09:52:55 -0400
committerJulie Qiu <julie@golang.org>2021-08-12 15:07:48 +0000
commit5e1bf620d930fac4d46bb87fbde026b0985f85d8 (patch)
tree49ad59e920a24bdaf0e0eaa64814f161fd788d93 /internal/postgres
parent50a9bb29fcbd615d6bb2933dc05f468ca8906d73 (diff)
downloadgo-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.go11
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 {