diff --git a/cmd/cli/item.go b/cmd/cli/item.go index c8e2a9e..1adaa68 100644 --- a/cmd/cli/item.go +++ b/cmd/cli/item.go @@ -266,10 +266,12 @@ func properMatch(str, term, padChar string) bool { // returns error if the query doesn't match the record func newItemFromRecordForQuery(record records.CliRecord, query query, debug bool) (item, error) { // Use numbers that won't add up to same score for any number of query words - const hitScore = 1.307 - const properMatchScore = 0.503 + // query score weigth 1.3 + const hitScore = 1.307 // 1 * 1.3 + const properMatchScore = 0.433 // 1/3 * 1.3 const hitScoreConsecutive = 0.002 + // context score weigth 1 // Host penalty var actualPwdScore = 0.9 var sameGitRepoScore = 0.8 @@ -284,23 +286,17 @@ func newItemFromRecordForQuery(record records.CliRecord, query query, debug bool differentHostScorePenalty = 0.1 } - const timeScoreCoef = 1e-13 + const timeScoreWeigth = 1e-13 // nonZeroExitCodeScorePenalty + differentHostScorePenalty score := 0.0 anyHit := false cmd := record.CmdLine for _, term := range query.terms { - termHit := false - if strings.Contains(record.CmdLine, term) { + c := strings.Count(record.CmdLine, term) + if c > 0 { anyHit = true - if termHit == false { - score += hitScore - } else if len(term) > 1 { - // only count consecutive matches for queries longer than 1 - score += hitScoreConsecutive - } - termHit = true + score += hitScore + hitScoreConsecutive*float64(c) if properMatch(cmd, term, " ") { score += properMatchScore } @@ -364,7 +360,7 @@ func newItemFromRecordForQuery(record records.CliRecord, query query, debug bool if score <= 0 && !anyHit { return item{}, errors.New("no match for given record and query") } - score += record.RealtimeBefore * timeScoreCoef + score += record.RealtimeBefore * timeScoreWeigth it := item{ realtimeBefore: record.RealtimeBefore,