summaryrefslogtreecommitdiff
path: root/core/search/search.go
diff options
context:
space:
mode:
authoralex <[email protected]>2026-07-29 00:56:57 +0200
committeralex <[email protected]>2026-07-29 00:56:57 +0200
commitb2e05a1d41540586cbaa7c8ee532393501601154 (patch)
tree2e39c75f30f95f5b308769c1def673fb4ac0538b /core/search/search.go
parent95ccea8d0244e515947c335ace620838f01be60a (diff)
downloadsearch-engine-b2e05a1d41540586cbaa7c8ee532393501601154.tar.xz
search-engine-b2e05a1d41540586cbaa7c8ee532393501601154.zip
added proximity based scoringHEADmain
Diffstat (limited to 'core/search/search.go')
-rw-r--r--core/search/search.go15
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)
})