summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicardo Wurmus <rekado@elephly.net>2020-05-14 09:28:15 +0200
committerRicardo Wurmus <rekado@elephly.net>2020-05-14 09:28:15 +0200
commite4fc77b09802ee4eb8487c954d1b3847321e8349 (patch)
tree8a1140e4394bcd57658fcf5956a7f3738d6f80a6
parent0d73a23c919c78549d36f32d715afc4f1fe8c4a0 (diff)
xapian: Collapse results for merged issues.
-rw-r--r--mumi/xapian.scm35
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?)