@@ -54,6 +54,17 @@ func (s indexWriterSeriesSlice) Less(i, j int) bool {
5454 return labels .Compare (s [i ].labels , s [j ].labels ) < 0
5555}
5656
57+ type symbolFrequencyPair struct {
58+ symbol string
59+ frequency int
60+ }
61+
62+ type symbolFrequencylist []symbolFrequencyPair
63+
64+ func (s symbolFrequencylist ) Len () int { return len (s ) }
65+ func (s symbolFrequencylist ) Swap (i , j int ) { s [i ], s [j ] = s [j ], s [i ] }
66+ func (s symbolFrequencylist ) Less (i , j int ) bool { return s [i ].frequency < s [j ].frequency }
67+
5768type indexWriterStage uint8
5869
5970const (
@@ -321,17 +332,17 @@ func (w *Writer) AddSeries(ref uint64, lset labels.Labels, chunks ...chunks.Meta
321332 return nil
322333}
323334
324- func (w * Writer ) AddSymbols (sym map [string ]struct {} ) error {
335+ func (w * Writer ) AddSymbols (sym map [string ]int ) error {
325336 if err := w .ensureStage (idxStageSymbols ); err != nil {
326337 return err
327338 }
328339 // Generate sorted list of strings we will store as reference table.
329- symbols := make ([] string , 0 , len (sym ))
340+ symbols := make (symbolFrequencylist , 0 , len (sym ))
330341
331- for s := range sym {
332- symbols = append (symbols , s )
342+ for k , v := range sym {
343+ symbols = append (symbols , symbolFrequencyPair { k , v } )
333344 }
334- sort .Strings ( symbols )
345+ sort .Sort ( sort . Reverse ( symbols ) )
335346
336347 const headerSize = 4
337348
@@ -343,8 +354,13 @@ func (w *Writer) AddSymbols(sym map[string]struct{}) error {
343354 w .symbols = make (map [string ]uint32 , len (symbols ))
344355
345356 for index , s := range symbols {
357+ << << << < Updated upstream
346358 w .symbols [s ] = uint32 (index )
347359 w .buf2 .putUvarintStr (s )
360+ == == == =
361+ w .symbols [s .symbol ] = uint32 (index )
362+ w .buf2 .putUvarintStr (s .symbol )
363+ >> >> >> > Stashed changes
348364 }
349365
350366 w .buf1 .putBE32int (w .buf2 .len ())
@@ -817,11 +833,11 @@ func (r *Reader) lookupSymbol(o uint32) (string, error) {
817833}
818834
819835// Symbols returns a set of symbols that exist within the index.
820- func (r * Reader ) Symbols () (map [string ]struct {} , error ) {
821- res := make (map [string ]struct {} , len (r .symbols ))
836+ func (r * Reader ) Symbols () (map [string ]int , error ) {
837+ res := make (map [string ]int , len (r .symbols ))
822838
823839 for _ , s := range r .symbols {
824- res [s ] = struct {}{}
840+ res [s ] = 0
825841 }
826842 return res , nil
827843}
0 commit comments