diff options
| author | alex <[email protected]> | 2026-07-29 00:56:57 +0200 |
|---|---|---|
| committer | alex <[email protected]> | 2026-07-29 00:56:57 +0200 |
| commit | b2e05a1d41540586cbaa7c8ee532393501601154 (patch) | |
| tree | 2e39c75f30f95f5b308769c1def673fb4ac0538b /core/search | |
| parent | 95ccea8d0244e515947c335ace620838f01be60a (diff) | |
| download | search-engine-main.tar.xz search-engine-main.zip | |
Diffstat (limited to 'core/search')
| -rw-r--r-- | core/search/search.go | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/core/search/search.go b/core/search/search.go index 721574c..cf1054b 100644 --- a/core/search/search.go +++ b/core/search/search.go @@ -24,6 +24,7 @@ func Search(idx *index.InvertedIndex, query string) []string { totalDocs := len(idx.DocNames) docMatchCounts := make(map[int]int) + docPostings := make(map[int][]index.Posting) scores := make(map[int]float64) uniqueMap := make(map[string]bool) @@ -48,6 +49,8 @@ func Search(idx *index.InvertedIndex, query string) []string { docMatchCounts[p.DocId]++ termScore := scoring.ScoreTFIDF(p, idf) scores[p.DocId] += termScore + + docPostings[p.DocId] = append(docPostings[p.DocId], p) } } @@ -57,7 +60,19 @@ func Search(idx *index.InvertedIndex, query string) []string { results = append(results, Result{DocID: docID, Score: scores[docID]}) } } + for i := range results { + proximityBonus := 0.0 + resultsPostings := docPostings[results[i].DocID] + for j := 0; j < len(resultsPostings)-1; j++ { + bodyBonus := scoring.CalculateProximity(resultsPostings[j].BodyPositions, resultsPostings[j+1].BodyPositions) + + titleBonus := scoring.CalculateProximity(resultsPostings[j].TitlePositions, resultsPostings[j+1].TitlePositions) + proximityBonus += bodyBonus + (titleBonus * 5.0) + } + + results[i].Score += proximityBonus + } slices.SortFunc(results, func(a, b Result) int { return cmp.Compare(b.Score, a.Score) }) |
