summaryrefslogtreecommitdiff
path: root/gnu/packages.scm
diff options
context:
space:
mode:
authorArun Isaac <arunisaac@systemreboot.net>2020-02-28 02:11:50 +0530
committerGuix Patches Tester <>2020-02-27 20:44:11 +0000
commit7b4c903e337d004677ed22b13ba74c0e28dc302d (patch)
treec5578664dad6313eb3a2448f831186488801eae0 /gnu/packages.scm
parent810e6c096ec7961962fdecece0ead0a010d7dd2a (diff)
downloadpatches-7b4c903e337d004677ed22b13ba74c0e28dc302d.tar
patches-7b4c903e337d004677ed22b13ba74c0e28dc302d.tar.gz
gnu: Use xapian index for package search.series-3037
* gnu/packages.scm (search-package-index): New function. * guix/scripts/package.scm (find-packages-by-description): Search using the xapian package index if search patterns are literal strings. Else, search using fold-packages.
Diffstat (limited to 'gnu/packages.scm')
-rw-r--r--gnu/packages.scm17
1 files changed, 16 insertions, 1 deletions
diff --git a/gnu/packages.scm b/gnu/packages.scm
index e91753e2a8..5b5b29bf84 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:
;;;
@@ -453,6 +454,20 @@ reducing the memory footprint."
db-path)
+(define (search-package-index profile querystring)
+ (let ((offset 0)
+ (pagesize 10))
+ (call-with-database (string-append profile %package-search-index)
+ (lambda (db)
+ (let ((query (parse-query querystring #:stemmer (make-stem "en"))))
+ (mset-fold (lambda (item result)
+ (match (find-packages-by-name
+ (document-data (mset-item-document item)))
+ ((package _ ...)
+ (append result `((,package . ,(mset-item-weight item)))))))
+ '()
+ (enquire-mset (enquire db query) offset pagesize)))))))
+
(define %sigint-prompt
;; The prompt to jump to upon SIGINT.