diff options
author | Ricardo Wurmus <rekado@elephly.net> | 2020-05-14 09:28:15 +0200 |
---|---|---|
committer | Ricardo Wurmus <rekado@elephly.net> | 2020-05-14 09:28:15 +0200 |
commit | e4fc77b09802ee4eb8487c954d1b3847321e8349 (patch) | |
tree | 8a1140e4394bcd57658fcf5956a7f3738d6f80a6 | |
parent | 0d73a23c919c78549d36f32d715afc4f1fe8c4a0 (diff) |
xapian: Collapse results for merged issues.
-rw-r--r-- | mumi/xapian.scm | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/mumi/xapian.scm b/mumi/xapian.scm index e4fd316..925f67b 100644 --- a/mumi/xapian.scm +++ b/mumi/xapian.scm @@ -98,7 +98,15 @@ messages and index their contents in the Xapian database at DBPATH." #:terms `((,idterm . 0)) #:values `((0 . ,(or (and date (date->string date "~Y~m~d")) "19700101")) - (1 . ,(or (and mdate (date->string mdate "~Y~m~d")) "19700101"))))) + (1 . ,(or (and mdate (date->string mdate "~Y~m~d")) "19700101")) + ;; This is used for collapsing search results + (2 . ,(let ((merged (bug-mergedwith bug))) + (if merged + (string-join + (sort (cons bugid (string-split merged #\space)) + string<) + " ") + bugid)))))) (term-generator (make-term-generator #:stem (make-stem "en") #:document doc))) ;; Index fields with a suitable prefix. This allows for @@ -261,16 +269,19 @@ intact." token)) (tokenize querystring)))) ;; Parse querystring passing a stemmer and suitable - ;; prefixes for field search. - (query (parse-query* querystring* - #:stemmer (make-stem "en") - #:prefixes '(("submitter" . "A") - ("author" . "XA") - ("subject" . "S") - ("owner" . "XO") - ("severity" . "XS") - ("tag" . "XT") - ("status" . "XSTATUS"))))) + ;; prefixes for field search. + (query (parse-query* querystring* + #:stemmer (make-stem "en") + #:prefixes '(("submitter" . "A") + ("author" . "XA") + ("subject" . "S") + ("owner" . "XO") + ("severity" . "XS") + ("tag" . "XT") + ("status" . "XSTATUS")))) + (enq (enquire db query))) + ;; Collapse on mergedwith value + (Enquire-set-collapse-key enq 2 1) ;; Fold over the results, return bug id. (mset-fold (lambda (item acc) (cons @@ -280,7 +291,7 @@ intact." ;; Get an Enquire object from the database with the ;; search results. Then, extract the MSet from the ;; Enquire object. - (enquire-mset (enquire db query) + (enquire-mset enq #:maximum-items pagesize)))))) (define* (index! #:key full?) |