diff options
author | Bjørn Erik Pedersen <[email protected]> | 2023-03-01 14:59:08 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2023-03-01 16:28:43 +0100 |
commit | 5c317c55e77c4783e089db653983c394742a6c52 (patch) | |
tree | 7f4aab51e39c00184b69ab8f466b687fb669b4fc /related | |
parent | a669467d98f54860fa7f06fbfdd1d8fdc98773fd (diff) | |
download | hugo-5c317c55e77c4783e089db653983c394742a6c52.tar.gz hugo-5c317c55e77c4783e089db653983c394742a6c52.zip |
Move the Related doc counter to prevent a race
Closes #10768
Diffstat (limited to 'related')
-rw-r--r-- | related/inverted_index.go | 20 |
1 files changed, 7 insertions, 13 deletions
diff --git a/related/inverted_index.go b/related/inverted_index.go index 967855133..ae894e522 100644 --- a/related/inverted_index.go +++ b/related/inverted_index.go @@ -143,13 +143,6 @@ type IndexConfig struct { // Will lower case all string values in and queries tothis index. // May get better accurate results, but at a slight performance cost. ToLower bool - - // Counts the number of documents in the index. - numDocs int -} - -func (cfg *IndexConfig) incrNumDocs() { - cfg.numDocs++ } // Document is the interface an indexable document in Hugo must fulfill. @@ -178,6 +171,8 @@ type FragmentProvider interface { type InvertedIndex struct { cfg Config index map[string]map[Keyword][]Document + // Counts the number of documents added to each index. + indexDocCount map[string]int minWeight int maxWeight int @@ -199,7 +194,7 @@ func (idx *InvertedIndex) getIndexCfg(name string) (IndexConfig, bool) { // NewInvertedIndex creates a new InvertedIndex. // Documents to index must be added in Add. func NewInvertedIndex(cfg Config) *InvertedIndex { - idx := &InvertedIndex{index: make(map[string]map[Keyword][]Document), cfg: cfg} + idx := &InvertedIndex{index: make(map[string]map[Keyword][]Document), indexDocCount: make(map[string]int), cfg: cfg} for _, conf := range cfg.Indices { idx.index[conf.Name] = make(map[Keyword][]Document) if conf.Weight < idx.minWeight { @@ -221,7 +216,7 @@ func (idx *InvertedIndex) Add(ctx context.Context, docs ...Document) error { panic("index is finalized") } var err error - for i, config := range idx.cfg.Indices { + for _, config := range idx.cfg.Indices { if config.Weight == 0 { // Disabled continue @@ -251,8 +246,7 @@ func (idx *InvertedIndex) Add(ctx context.Context, docs ...Document) error { } if added { - c := &idx.cfg.Indices[i] - (*c).incrNumDocs() + idx.indexDocCount[config.Name]++ } } } @@ -270,12 +264,12 @@ func (idx *InvertedIndex) Finalize(ctx context.Context) error { continue } setm := idx.index[config.Name] - numDocs := config.numDocs - if numDocs == 0 { + if idx.indexDocCount[config.Name] == 0 { continue } // Remove high cardinality terms. + numDocs := idx.indexDocCount[config.Name] for k, v := range setm { percentageWithKeyword := int(math.Ceil(float64(len(v)) / float64(numDocs) * 100)) if percentageWithKeyword > config.CardinalityThreshold { |