ui: Increase relevance score for exact matches.
Previously "guix package -s python" would have 'python2-zope-interface' as its first result (relevance: 10), followed by many other python-* packages with the same score, while 'python' itself would come later (relevance: 7). This change makes 'python' the first result (relevance: 27). Reported by Gábor Boskovits. * guix/ui.scm (relevance)[score]: Use 'fold-matches' instead of 'match:count' to counter the number of maches. Give more weight to exact matches.
This commit is contained in:
parent
373cc3b74a
commit
fd1395c498
1 changed files with 8 additions and 5 deletions
13
guix/ui.scm
13
guix/ui.scm
|
@ -1222,11 +1222,14 @@ field in the final score.
|
||||||
A score of zero means that OBJ does not match any of REGEXPS. The higher the
|
A score of zero means that OBJ does not match any of REGEXPS. The higher the
|
||||||
score, the more relevant OBJ is to REGEXPS."
|
score, the more relevant OBJ is to REGEXPS."
|
||||||
(define (score str)
|
(define (score str)
|
||||||
(let ((counts (filter-map (lambda (regexp)
|
(let ((counts (map (lambda (regexp)
|
||||||
(match (regexp-exec regexp str)
|
(match (fold-matches regexp str '() cons)
|
||||||
(#f #f)
|
(() 0)
|
||||||
(m (match:count m))))
|
((m) (if (string=? (match:substring m) str)
|
||||||
regexps)))
|
5 ;exact match
|
||||||
|
1))
|
||||||
|
(lst (length lst))))
|
||||||
|
regexps)))
|
||||||
;; Compute a score that's proportional to the number of regexps matched
|
;; Compute a score that's proportional to the number of regexps matched
|
||||||
;; and to the number of matches for each regexp.
|
;; and to the number of matches for each regexp.
|
||||||
(* (length counts) (reduce + 0 counts))))
|
(* (length counts) (reduce + 0 counts))))
|
||||||
|
|
Reference in a new issue