@@ -10,6 +10,7 @@ import (
1010 "net/url"
1111 "regexp"
1212 "slices"
13+ "strconv"
1314 "strings"
1415 "sync"
1516 "time"
@@ -89,19 +90,19 @@ func (c *MBClient) SearchRelease(ctx context.Context, q ReleaseQuery) (*Release,
8990 params = append (params , field ("date" , q .Date .Format (time .DateOnly )))
9091 }
9192 if q .Format != "" {
92- params = append (params , field ("format" , strings .ToLower (q .Format )))
93+ params = append (params , boostField ( field ("format" , strings .ToLower (q .Format )), 3 )) // boosted
9394 }
9495 if q .Label != "" {
95- params = append (params , field ("label" , strings .ToLower (q .Label )))
96+ params = append (params , boostField ( field ("label" , strings .ToLower (q .Label )), 3 )) // boosted
9697 }
9798 if q .CatalogueNum != "" {
98- params = append (params , field ("catno" , strings .ToLower (q .CatalogueNum )))
99+ params = append (params , boostField ( field ("catno" , strings .ToLower (q .CatalogueNum )), 3 )) // boosted
99100 }
100101 if q .Barcode != "" {
101102 params = append (params , field ("barcode" , q .Barcode ))
102103 }
103104 if q .NumTracks > 0 {
104- params = append (params , field ("tracks" , q .NumTracks ))
105+ params = append (params , boostField ( field ("tracks" , q .NumTracks ), 10 )) // boosted
105106 }
106107 if len (params ) == 0 {
107108 return nil , ErrNoResults
@@ -577,6 +578,12 @@ func field(k string, v any) string {
577578 return fmt .Sprintf ("%s:(%v)" , k , vstr )
578579}
579580
581+ func boostField (f string , boost float64 ) string {
582+ b := strconv .FormatFloat (boost , 'f' , - 1 , 64 ) // no trailing .0
583+ f += "^" + b
584+ return f
585+ }
586+
580587func joinPath (base string , p ... string ) string {
581588 r , _ := url .JoinPath (base , p ... )
582589 return r
0 commit comments