summaryrefslogtreecommitdiffstats
path: root/related
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-03-01 14:59:08 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2023-03-01 16:28:43 +0100
commit5c317c55e77c4783e089db653983c394742a6c52 (patch)
tree7f4aab51e39c00184b69ab8f466b687fb669b4fc /related
parenta669467d98f54860fa7f06fbfdd1d8fdc98773fd (diff)
Move the Related doc counter to prevent a race
Closes #10768
Diffstat (limited to 'related')
-rw-r--r--related/inverted_index.go20
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 {