summaryrefslogtreecommitdiff
path: root/gnu/packages.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages.scm')
-rw-r--r--gnu/packages.scm22
1 files changed, 21 insertions, 1 deletions
diff --git a/gnu/packages.scm b/gnu/packages.scm
index c8e221de68..3cbd7c63e3 100644
--- a/gnu/packages.scm
+++ b/gnu/packages.scm
@@ -67,7 +67,8 @@
specifications->manifest
generate-package-cache
- generate-package-search-index))
+ generate-package-search-index
+ search-package-index))
;;; Commentary:
;;;
@@ -466,6 +467,25 @@ reducing the memory footprint."
db-path)
+(define (search-package-index profile query-string)
+ "Search Xapian index in PROFILE for packages matching the Xapian query
+QUERY-STRING. Return a list of search result texts each corresponding to one
+matching package."
+ (call-with-database (string-append profile %package-search-index)
+ (lambda (db)
+ (let ((query (parse-query query-string #:stemmer (make-stem "en"))))
+ (mset-fold (lambda (item result)
+ (let ((search-result-text
+ (call-with-output-string
+ (cut format <> "~a~%relevance: ~a~%~%"
+ (document-data (mset-item-document item))
+ ;; Round score to one decimal place.
+ (/ (round (* 10 (mset-item-weight item))) 10)))))
+ (append result (list search-result-text))))
+ '()
+ (enquire-mset (enquire db query)
+ #:maximum-items (database-document-count db)))))))
+
(define %sigint-prompt
;; The prompt to jump to upon SIGINT.